*** empty log message ***
[thera-pi.git] / Reha / src / stammDatenTools / RezTools.java
blob6bef43a1156d02d8ff5dd3a6cee8e0f48c6ea503
1 package stammDatenTools;
3 import hauptFenster.Reha;
5 import java.awt.Point;
6 import java.math.BigDecimal;
7 import java.text.DecimalFormat;
8 import java.util.ArrayList;
9 import java.util.Arrays;
10 import java.util.Collections;
11 import java.util.Comparator;
12 import java.util.List;
13 import java.util.Vector;
15 import javax.swing.JOptionPane;
17 import org.jdesktop.swingworker.SwingWorker;
19 import CommonTools.SqlInfo;
20 import systemEinstellungen.SystemConfig;
21 import systemEinstellungen.SystemPreislisten;
22 import CommonTools.StringTools;
23 import terminKalender.BestaetigungsDaten;
24 import terminKalender.DatFunk;
25 import terminKalender.TerminBestaetigenAuswahlFenster;
26 import terminKalender.TermineErfassen;
28 public class RezTools {
29 public static final int REZEPT_IST_JETZ_VOLL = 0;
30 public static final int REZEPT_IST_BEREITS_VOLL = 1;
31 public static final int REZEPT_HAT_LUFT = 2;
32 public static final int REZEPT_FEHLER = 3;
33 public static final int REZEPT_ABBRUCH = 4;
34 public static final int DIALOG_ABBRUCH = -1;
35 public static final int DIALOG_OK = 0;
36 public static int DIALOG_WERT = 0;
38 public static boolean mitJahresWechsel(String datum){
39 boolean ret = false;
40 try{
41 if( (Integer.parseInt(datum.substring(6))-Integer.parseInt(SystemConfig.aktJahr)) < 0){
42 ret = true;
44 }catch(Exception ex){
47 return ret;
50 public static Vector<ArrayList<?>> Y_holePosUndAnzahlAusRezept(String xreznr){
51 Vector<ArrayList<?>> xvec = new Vector<ArrayList<?>>();
52 ArrayList<String> positionen = new ArrayList<String>();
53 ArrayList<String> doppeltest = new ArrayList<String>();
54 ArrayList<Integer>anzahl = new ArrayList<Integer>();
56 Vector<String> rezvec = null;
58 rezvec = SqlInfo.holeSatz("verordn", "art_dbeh1,art_dbeh2,art_dbeh3,art_dbeh4,"+
59 "anzahl1,anzahl2,anzahl3,anzahl4", "rez_nr='"+xreznr+"'", Arrays.asList(new String[] {}));
60 for(int i = 0; i < 4; i++){
61 if(! rezvec.get(i).equals("0")){
62 if(i==0){
63 positionen.add( holePosAusIdUndRezNr( rezvec.get(i), xreznr) );
64 anzahl.add(Integer.parseInt(rezvec.get(i+4)));
65 doppeltest.add(rezvec.get(i));
66 }else if(i>=1){
67 doppeltest.add(rezvec.get(i));
69 if(rezvec.indexOf(rezvec.get(i))!=i){ //Doppelbehandlung, wenn die HMPos vor i schon mal aufgeführt ist. Hintergrund: Doppelbehandlungen müssen nicht auf i=0 und i=1 sein
70 anzahl.set(0, Integer.parseInt(rezvec.get(i+4))+Integer.parseInt(rezvec.get(rezvec.indexOf(rezvec.get(i))+4)));
71 }else{
72 positionen.add( holePosAusIdUndRezNr( rezvec.get(i), xreznr) );
73 anzahl.add(Integer.parseInt(rezvec.get(i+4)));
76 //positionen.add( holePosAusIdUndRezNr( rezvec.get(i), xreznr) );
77 //anzahl.add(Integer.parseInt(rezvec.get(i+4)));
78 }else{
79 doppeltest.add(rezvec.get(i));
80 positionen.add( holePosAusIdUndRezNr( rezvec.get(i),xreznr) );
81 anzahl.add(Integer.parseInt(rezvec.get(i+4)));
85 xvec.add((ArrayList<?>)positionen.clone());
86 xvec.add((ArrayList<?>)anzahl.clone());
87 xvec.add((ArrayList<?>)doppeltest.clone()); //zum Test ausgeschaltet
88 return xvec;
91 private static Object[] sucheDoppel(int pos,List<String> list,String comperator){
92 //System.out.println("Position="+pos+" fistIndex="+list.indexOf(comperator)+" lastIndex="+list.lastIndexOf(comperator));
93 if(pos == list.indexOf(comperator)){
94 Object[] obj = {true,list.indexOf(comperator),list.lastIndexOf(comperator)};
95 return obj.clone();
96 }else{
97 Object[] obj = {true,list.lastIndexOf(comperator),list.indexOf(comperator)};
98 return obj.clone();
101 /**************
104 * Mistding - elendes aber jetzt haben wir dich!
107 public static Vector<ArrayList<?>> holePosUndAnzahlAusTerminen(String xreznr){
108 Vector<ArrayList<?>> xvec = new Vector<ArrayList<?>>();
110 Vector<String> rezvec = SqlInfo.holeSatz("verordn", "termine,pos1,pos2,pos3,"+
111 "pos4,kuerzel1,kuerzel2,kuerzel3,kuerzel4,preisgruppe", "rez_nr='"+xreznr+"'", Arrays.asList(new String[] {}));
112 Vector<String> termvec = holeEinzelZiffernAusRezept(null,rezvec.get(0));
114 List<String> list = Arrays.asList(rezvec.get(1),rezvec.get(2),rezvec.get(3),rezvec.get(4));
118 ArrayList<String> positionen = new ArrayList<String>();
119 String behandlungen = null;
120 String[] einzelbehandlung = null;
121 ArrayList<Integer>anzahl = new ArrayList<Integer>();
122 ArrayList<Boolean>vorrangig = new ArrayList<Boolean>();
123 ArrayList<Boolean>einzelerlaubt = new ArrayList<Boolean>();
124 ArrayList<Object[]>doppelpos = new ArrayList<Object[]>();
125 boolean[] bvorrangig = null;
126 //String aktpos = "";
127 for(int i = 1; i < 5; i++ ){
129 if(rezvec.get(i).trim().equals("")){
130 break;
133 positionen.add(String.valueOf(rezvec.get(i)));
134 bvorrangig = isVorrangigAndExtra(rezvec.get(i+4),xreznr);
135 vorrangig.add(Boolean.valueOf(bvorrangig[0]));
136 einzelerlaubt.add(Boolean.valueOf(bvorrangig[1]));
137 anzahl.add(0);
139 if(countOccurence(list,rezvec.get(i)) > 1){
140 doppelpos.add(sucheDoppel(i-1,list,rezvec.get(i)));
141 }else{
142 Object[] obj = {false,i-1,i-1};
143 doppelpos.add(obj.clone());
149 Vector<String> imtag = new Vector<String>();
150 Object[] tests = null;
151 for(int i = 0; i < termvec.size();i++){
152 //Über alle Tage hinweg
153 try{
154 behandlungen = termvec.get(i);
155 if(! behandlungen.equals("")){
156 einzelbehandlung = behandlungen.split(",");
157 imtag.clear();
158 int i2;
159 for(i2=0;i2<einzelbehandlung.length;i2++){
160 try{
161 //Jetzt testen ob Doppelbehandlung
162 tests = doppelpos.get(list.indexOf(einzelbehandlung[i2]));
163 if((Boolean) tests[0]){
164 //Ja Doppelbehandlung
165 imtag.add(String.valueOf(einzelbehandlung[i2]));
166 //Jetzt testen ob erste oder Zweite
167 if(imtag.indexOf(einzelbehandlung[i2]) == imtag.lastIndexOf(einzelbehandlung[i2]) ){
168 //Erstes mal
169 anzahl.set((Integer)tests[1], anzahl.get((Integer)tests[1])+1);
170 }else{
171 //Zweites mal
172 anzahl.set((Integer)tests[2], anzahl.get((Integer)tests[2])+1);
174 }else{
175 //Nein keine Doppelbehandlung
176 anzahl.set((Integer)tests[1], anzahl.get((Integer)tests[1])+1);
178 }catch(Exception ex){
179 try{
180 String disziplin = RezTools.putRezNrGetDisziplin(xreznr);
181 String kuerzel = RezTools.getKurzformFromPos(einzelbehandlung[i2], rezvec.get(9), SystemPreislisten.hmPreise.get(disziplin).get(Integer.parseInt(rezvec.get(9))-1));
182 JOptionPane.showMessageDialog(null,"<html><font color='#ff0000' size=+2>Fehler in der Ermittlung der Behandlungspositionen!</font><br><br>"+
183 "<b>Bitte kontrollieren sie die bereits gespeicherten Behandlungspositionen!!<br><br>"+
184 "Der problematische Termin ist der <font color='#ff0000'>"+(i+1)+".Termin</font>,<br>bestätigte Behandlungsart ist <font color='#ff0000'>"+kuerzel+" ("+einzelbehandlung[i2]+")<br>"+
185 "<br>Diese Behandlungsart ist im Rezeptblatt nicht, oder nicht mehr verzeichnet</font><br><br>"+
186 "<br>"+
187 "<b><font color='#ff0000'>Lösung:</font> Klicken Sie die Termintabelle an, drücken Sie dann die rechte Maustaste und wählen Sie dann die Option<br><br>"+
188 "<b><u>\"alle Behandlungsarten den Rezeptdaten angleichen\"</u></b><br>"+
189 "</b>oder<br><b><u>\"alle im Rezept gespeicherten Behandlungsarten löschen\"</u></b><br></html>");
190 return xvec;
191 }catch(Exception ex2){
192 JOptionPane.showMessageDialog(null,"<html><font color='#ff0000' size=+2>Fehler in der Ermittlung der Behandlungspositionen!</font><br><br>"+
193 "<b>Bitte kontrollieren sie die bereits gespeicherten Behandlungspositionen!!<br><br>"+
194 "Der Fehler kann nicht genau lokalisiert werden!<br><br>"+
195 "Vermutlich wurden in den bisherigen Terminen Positionen bestätigt, die im Rezeptblatt<br>"+
196 "<u>nicht oder nicht mehr aufgeführt sind.</u><br><br>"+
197 "<b>Klicken Sie die Termintabelle an, drücken Sie dann die rechte Maustaste und wählen Sie eine Option aus.<b><br></html>");
198 return xvec;
203 }else{
204 for(int i3=0;i3<positionen.size();i3++)
205 anzahl.set(i3, anzahl.get(i3)+1);
207 }catch(Exception ex){
208 ex.printStackTrace();
212 System.out.println("*************************************************");
213 System.out.println(positionen);
214 System.out.println(anzahl);
215 System.out.println(vorrangig);
216 System.out.println(einzelerlaubt);
217 System.out.println("*************************************************");
219 xvec.add((ArrayList<?>)positionen.clone());
220 xvec.add((ArrayList<?>)anzahl.clone());
221 xvec.add((ArrayList<?>)vorrangig.clone());
222 xvec.add((ArrayList<?>)einzelerlaubt.clone());
223 xvec.add((ArrayList<?>)doppelpos.clone());
224 return xvec;
227 public static Vector<ArrayList<?>> X_holePosUndAnzahlAusTerminen(String xreznr){
228 Vector<ArrayList<?>> xvec = new Vector<ArrayList<?>>();
229 Vector<String> termvec = holeEinzelZiffernAusRezept(xreznr,"");
230 String behandlungen = null;
231 String[] einzelbehandlung = null;
232 ArrayList<String> positionen = new ArrayList<String>();
233 ArrayList<Integer>anzahl = new ArrayList<Integer>();
234 int trefferbei = -1;
235 for(int i = 0; i < termvec.size();i++){
236 behandlungen = termvec.get(i);
237 if(! behandlungen.equals("")){
238 einzelbehandlung = behandlungen.split(",");
239 //Scheiße weil Doppelbehandlungen zusammengefaßt werden
240 //Wird verwendet von: TerminFenster.terminBestaetigen()
241 //dort werden Doppelbehandlungen nachträglich erkannt und korrigiert
242 for(int i2 = 0; i2 < einzelbehandlung.length;i2++){
243 trefferbei = positionen.indexOf(einzelbehandlung[i2]);
244 if(trefferbei >= 0){
245 anzahl.set(trefferbei,anzahl.get(trefferbei)+1 );
246 }else{
247 positionen.add(einzelbehandlung[i2]);
248 anzahl.add(1);
253 xvec.add((ArrayList<?>)positionen.clone());
254 xvec.add((ArrayList<?>)anzahl.clone());
255 return xvec;
257 public static int countOccurence(List<String> list, String comperator){
258 int ret = 0;
259 for(int i = 0; i < list.size();i++){
260 if(list.get(i).trim().equals(comperator.trim())){
261 ret++;
264 return ret;
267 public static boolean[] isVorrangigAndExtra(String kuerzel,String xreznr){
268 boolean[] bret = {false,false};
269 Vector<Vector<String>> vec = SqlInfo.holeFelder("select vorrangig,extraok from kuerzel where kuerzel='"+kuerzel+
270 "' and disziplin ='"+xreznr.substring(0,2)+"' LIMIT 1");
271 if(vec.size() <= 0){
272 String msg = "Achtung!\n\n"+
273 "Ihre Kürzelzuordnung in den Preislisten ist nicht korrekt!!!!!\n"+
274 "Kürzel: "+kuerzel+"\n"+
275 "Disziplin: "+xreznr.substring(0,2)+"\n\n"+
276 "Für die ausgewählte Diziplin ist das angegebene Kürzel nicht in der Kürzeltabelle vermerkt!";
277 JOptionPane.showMessageDialog(null, msg);
278 return null;
280 bret[0] = vec.get(0).get(0).equals("T");
281 bret[1] = vec.get(0).get(1).equals("T");
282 return bret;
285 @SuppressWarnings("unchecked")
286 public static Vector<String> holeEinzelZiffernAusRezept(String xreznr,String termine){
287 Vector<String> xvec = null;
288 Vector<String> retvec = new Vector<String>();
289 String terms = null;
290 if(termine.equals("")){
291 xvec = SqlInfo.holeSatz("verordn", "termine,pat_intern", "rez_nr='"+xreznr+"'", Arrays.asList(new String[] {}));
292 if(xvec.size()==0){
293 return (Vector<String>)retvec.clone();
294 }else{
295 terms = (String) xvec.get(0);
297 }else{
298 terms = termine;
300 if(terms==null){
301 return (Vector<String>)retvec.clone();
303 if(terms.equals("")){
304 return (Vector<String>)retvec.clone();
306 String[] tlines = terms.split("\n");
307 int lines = tlines.length;
309 for(int i = 0;i<lines;i++){
310 String[] terdat = tlines[i].split("@");
311 //int ieinzel = terdat.length;
312 retvec.add(terdat[3].trim());
314 return (Vector<String>)retvec.clone();
317 public static Object[] holeTermineAnzahlUndLetzter(String termine){
318 Object[] retobj = {null,null};
319 try{
320 String[] tlines = termine.split("\n");
321 int lines = tlines.length;
322 if(lines <= 0){
323 retobj[0] = 0;
324 retobj[1] = null;
325 return retobj;
327 String[] terdat = null;
328 terdat = tlines[lines-1].split("@");
329 retobj[0] = Integer.valueOf(lines);
330 retobj[1] = String.valueOf(terdat[0]);
331 }catch(Exception ex){
334 return retobj;
337 @SuppressWarnings("unchecked")
338 public static Vector<String> holeEinzelTermineAusRezept(String xreznr,String termine){
339 Vector<String> xvec = null;
340 Vector<String> retvec = new Vector<String>();
341 String terms = null;
342 if(termine.equals("")){
343 xvec = SqlInfo.holeSatz("verordn", "termine,pat_intern", "rez_nr='"+xreznr+"'", Arrays.asList(new String[] {}));
344 if(xvec.size()==0){
345 return (Vector<String>)retvec.clone();
346 }else{
347 terms = (String) xvec.get(0);
349 }else{
350 terms = termine;
352 if(terms==null){
353 return (Vector<String>)retvec.clone();
355 if(terms.equals("")){
356 return (Vector<String>)retvec.clone();
358 String[] tlines = terms.split("\n");
359 int lines = tlines.length;
360 String[] terdat = null;
361 for(int i = 0;i<lines;i++){
362 terdat = tlines[i].split("@");
363 //int ieinzel = terdat.length;
364 retvec.add((terdat[0].trim().equals("") ? " . . " : String.valueOf(terdat[0])));
366 Comparator<String> comparator = new Comparator<String>() {
367 public int compare(String s1, String s2) {
368 String strings1 = DatFunk.sDatInSQL(s1);
369 String strings2 = DatFunk.sDatInSQL(s2);
370 return strings1.compareTo(strings2);
373 Collections.sort(retvec,comparator);
374 return (Vector<String>)retvec.clone();
376 public static String holePosAusIdUndRezNr(String id,String reznr){
377 String diszi = RezTools.putRezNrGetDisziplin(reznr);
378 String preisgruppe = SqlInfo.holeEinzelFeld("select preisgruppe from verordn where rez_nr='"+reznr+"' LIMIT 1");
379 Vector<Vector<String>> preisvec = (Vector<Vector<String>>) SystemPreislisten.hmPreise.get(diszi).get(Integer.parseInt(preisgruppe)-1);
380 String pos = RezTools.getPosFromID(id, preisgruppe, preisvec) ;
381 return (pos==null ? "" : pos);
383 /********************************************************************************/
384 @SuppressWarnings("unchecked")
385 public static Vector<Vector<String>> macheTerminVector(String termine){
386 String[] tlines = termine.split("\n");
387 int lines = tlines.length;
388 ////System.out.println("Anzahl Termine = "+lines);
389 Vector<Vector<String>> tagevec = new Vector<Vector<String>>();
390 Vector<String> tvec = new Vector<String>();
391 String[] terdat = null;
392 for(int i = 0;i<lines;i++){
393 terdat = tlines[i].split("@");
394 int ieinzel = terdat.length;
395 ////System.out.println("Anzahl Splits = "+ieinzel);
396 tvec.clear();
397 for(int y = 0; y < ieinzel;y++){
398 if(y==0){
399 tvec.add(String.valueOf((terdat[y].trim().equals("") ? " . . " : terdat[y])));
400 if(i==0){
401 SystemConfig.hmAdrRDaten.put("<Rerstdat>",String.valueOf((terdat[y].trim().equals("") ? " . . " : terdat[y])));
403 }else{
404 tvec.add(String.valueOf(terdat[y]));
406 ////System.out.println("Feld "+y+" = "+terdat[y]);
408 ////System.out.println("Termivector = "+tvec);
409 tagevec.add((Vector<String>)tvec.clone());
411 if(tagevec.size() > 0 ){
412 Comparator<Vector<String>> comparator = new Comparator<Vector<String>>() {
413 @Override
414 public int compare(Vector<String> o1, Vector<String> o2) {
415 String s1 = (String)o1.get(4);
416 String s2 = (String)o2.get(4);
417 return s1.compareTo(s2);
420 Collections.sort(tagevec,comparator);
423 return (Vector<Vector<String>>)tagevec.clone();
426 /********************************************************************************/
427 public static boolean zweiPositionenBeiHB(String disziplin,String preisgruppe){
428 int pg = Integer.parseInt(preisgruppe)-1;
429 if(SystemPreislisten.hmHBRegeln.get(disziplin).get(pg).get(2).trim().equals("") &&
430 SystemPreislisten.hmHBRegeln.get(disziplin).get(pg).get(3).trim().equals("") ){
431 return false;
433 return true;
435 public static boolean keineWeggebuehrBeiHB(String disziplin,String preisgruppe){
436 int pg = Integer.parseInt(preisgruppe)-1;
437 if(SystemPreislisten.hmHBRegeln.get(disziplin).get(pg).get(2).trim().equals("") &&
438 SystemPreislisten.hmHBRegeln.get(disziplin).get(pg).get(3).trim().equals("") ){
439 return true;
441 return false;
444 /********************************************************************************/
446 public static String getLangtextFromID(String id,String preisgruppe,Vector<Vector<String>> vec){
447 int lang = vec.size(),i;
448 int idpos = vec.get(0).size()-1;
449 String ret = "kein Lantext vorhanden";
450 for(i = 0; i < lang;i++){
451 if( vec.get(i).get(idpos).equals(id)){
452 ret = vec.get(i).get(0).toString();
453 break;
456 return ret;
459 public static String getPreisAktFromID(String id,String preisgruppe,Vector<Vector<String>> vec){
460 int lang = vec.size(),i;
461 int idpos = vec.get(0).size()-1;
462 String ret = "0.00";
463 for(i = 0; i < lang;i++){
464 if( vec.get(i).get(idpos).equals(id)){
465 ret = vec.get(i).get(3).toString();
466 break;
469 return ret;
471 public static String getPreisAltFromID(String id,String preisgruppe,Vector<Vector<String>> vec){
472 int lang = vec.size(),i;
473 int idpos = vec.get(0).size()-1;
474 String ret = "0.00";
475 for(i = 0; i < lang;i++){
476 if( vec.get(i).get(idpos).equals(id)){
477 ret = vec.get(i).get(4).toString();
478 break;
481 return ret;
483 /***************************************/
484 public static String getPreisAktFromPos(String pos,String preisgruppe,Vector<Vector<String>> vec){
485 try{
486 int lang = vec.size(),i;
487 String ret = "0.00";
488 for(i = 0; i < lang;i++){
489 if( vec.get(i).get(2).equals(pos)){
490 ret = vec.get(i).get(3).toString();
491 break;
494 return ret;
495 }catch(Exception ex){
496 ex.printStackTrace();
497 return "0.00";
500 public static String getPreisAltFromPos(String pos,String preisgruppe,Vector<Vector<String>> vec){
501 int lang = vec.size(),i;
502 String ret = "0.00";
503 for(i = 0; i < lang;i++){
504 if( vec.get(i).get(1).equals(pos)){
505 ret = vec.get(i).get(4).toString();
506 break;
509 return ret;
511 public static String getPreisAltFromPosNeu(String pos,String preisgruppe,Vector<Vector<String>> vec){
512 int lang = vec.size(),i;
513 String ret = "0.00";
514 for(i = 0; i < lang;i++){
515 if( vec.get(i).get(2).equals(pos)){
516 ret = vec.get(i).get(4).toString();
517 break;
520 return ret;
523 /***************************************/
524 public static String getIDFromPos(String pos,String preisgruppe,Vector<Vector<String>> vec){
525 int lang = vec.size(),i;
526 int idpos = vec.get(0).size()-1;
527 String ret = "-1";
528 for(i = 0; i < lang;i++){
529 if( vec.get(i).get(2).equals(pos)){
530 ret = vec.get(i).get(idpos).toString();
531 break;
534 return ret;
536 public static String getIDFromPosX(String pos,String preisgruppe,String disziplin){
537 Vector<Vector<String>> vec = holePreisVector(disziplin,Integer.parseInt(preisgruppe)-1);
538 int lang = vec.size(),i;
539 int idpos = vec.get(0).size()-1;
540 String ret = "-1";
541 for(i = 0; i < lang;i++){
542 if( vec.get(i).get(2).equals(pos)){
543 ret = vec.get(i).get(idpos).toString();
544 break;
547 return ret;
550 public static String getPosFromID(String id,String preisgruppe,Vector<Vector<String>> vec){
551 int lang = vec.size(),i;
552 int idpos = vec.get(0).size()-1;
553 String ret = "";
554 for(i = 0; i < lang;i++){
555 if( vec.get(i).get(idpos).equals(id)){
556 ret = vec.get(i).get(2).toString();
557 break;
560 return ret;
563 public static String getKurzformFromID(String id,Vector<Vector<String>> vec){
564 int lang = vec.size(),i;
565 int idpos = vec.get(0).size()-1;
566 String ret = "";
567 for(i = 0; i < lang;i++){
568 if(vec.get(i).get(idpos).equals(id)){
569 ret = vec.get(i).get(1).toString();
570 break;
573 return ret;
575 public static String getKurzformFromPos(String pos,String preisgruppe,Vector<Vector<String>> vec){
576 //Parameter preisgruppe wird nicht ausgewertet
577 int lang = vec.size(),i;
578 //int suchenin = (Integer.parseInt(preisgruppe)*4)-2;
579 String ret = "";
580 try{
581 for(i = 0; i < lang;i++){
582 if(vec.get(i).get(2).trim().equals(pos.trim()) && (!vec.get(i).get(1).equals("Isokin")) ){
583 ret = vec.get(i).get(1).toString();
584 break;
587 }catch(Exception ex){
588 System.out.println("Parameter pos = "+pos);
589 System.out.println("Parameter preisgruppe = "+preisgruppe);
590 System.out.println("Parameter vec = "+vec);
591 System.out.println("Parameter ret = "+ret);
592 System.out.println("Nachfolgend die Excepiton von getKurzformFromPos");
593 ex.printStackTrace();
595 return ret;
597 public static Object[] getKurzformUndIDFromPos(String pos,String preisgruppe,Vector<Vector<String>> vec){
598 int lang = vec.size(),i;
599 //int suchenin = (Integer.parseInt(preisgruppe)*4)-2;
600 int idpos = vec.get(0).size()-1;
601 Object[] retobj = {"",""};
602 for(i = 0; i < lang;i++){
603 if(vec.get(i).get(2).equals(pos) && (!vec.get(i).get(1).equals("Isokin"))){
604 retobj[0] = vec.get(i).get(1).toString();
605 retobj[1] = vec.get(i).get(idpos).toString();
606 break;
609 return retobj.clone();
612 public static String getIDFromKurzform(String kurzform,Vector<Vector<String>> vec){
613 int lang = vec.size(),i;
614 int idpos = vec.get(0).size()-1;
615 String ret = "";
616 for(i = 0; i < lang;i++){
617 if(vec.get(i).get(1).equals(kurzform)){
618 ret = vec.get(i).get(idpos).toString();
619 break;
622 return ret;
625 public static Vector<Vector<String>> holePreisVector(String disziplin,int preisgruppe){
626 if(disziplin.startsWith("KG")){
627 //return (Vector<Vector<String>>)ParameterLaden.vKGPreise;
628 return SystemPreislisten.hmPreise.get("Physio").get(preisgruppe);
629 }else if(disziplin.startsWith("MA")){
630 //return (Vector<Vector<String>>)ParameterLaden.vMAPreise;
631 return SystemPreislisten.hmPreise.get("Massage").get(preisgruppe);
632 }else if(disziplin.startsWith("ER")){
633 //return (Vector<Vector<String>>)ParameterLaden.vERPreise;
634 return SystemPreislisten.hmPreise.get("Ergo").get(preisgruppe);
635 }else if(disziplin.startsWith("LO")){
636 //return (Vector<Vector<String>>)ParameterLaden.vLOPreise;
637 return SystemPreislisten.hmPreise.get("Logo").get(preisgruppe);
638 }else if(disziplin.startsWith("RH")){
639 //return (Vector<Vector<String>>)ParameterLaden.vRHPreise;
640 return SystemPreislisten.hmPreise.get("Reha").get(preisgruppe);
641 }else if(disziplin.startsWith("PO")){
642 //return (Vector<Vector<String>>)ParameterLaden.vRHPreise;
643 return SystemPreislisten.hmPreise.get("Podo").get(preisgruppe);
645 return null;
650 class ZuzahlModell{
651 public int gesamtZahl;
652 public boolean allefrei;
653 public boolean allezuzahl;
654 public boolean anfangfrei;
655 public int teil1;
656 public int teil2;
657 public boolean hausbes;
658 public boolean mithausbes;
659 public ZuzahlModell(int gesamt,boolean allefrei){
664 public static boolean neuePreisNachRezeptdatumOderStichtag(String aktDisziplin,int tarifgruppe,String rez_datum,boolean neuanlage,Vector<String> rezvec){
665 try{
666 String datum = SystemPreislisten.hmNeuePreiseAb.get(aktDisziplin).get(tarifgruppe);
667 int regel = SystemPreislisten.hmNeuePreiseRegel.get(aktDisziplin).get(tarifgruppe);
668 Vector<String> tage = null;
669 //Regel 1=nach Behandlungsbeginn, 2=nach Rezeptdatum, 3=irgend eine Behandlung ab Datum //der Rest wird nicht ausgewertet
670 if(!datum.trim().equals("") && regel==2){
671 if(DatFunk.TageDifferenz(datum, rez_datum) < 0){
672 return false;
674 return true;
675 }else if(!datum.trim().equals("") && regel==1){
676 //Neuanlage
677 if(neuanlage){
678 if(DatFunk.TageDifferenz(datum,DatFunk.sHeute() ) < 0){
679 return false;
681 return true;
683 //Tage holen
684 tage = RezTools.holeEinzelTermineAusRezept(null, rezvec.get(34));
685 if(tage.size()==0 ){
686 //keine Tage vorhanden und Datum heute >= Regeldatum
687 if(DatFunk.TageDifferenz(datum,DatFunk.sHeute() ) < 0){
688 return false;
690 return true;
691 }else if(tage.size() > 0 ){
692 //Tage vorhanden dann Datum testen
693 if(DatFunk.TageDifferenz(datum, tage.get(0)) < 0){
694 return false;
696 return true;
698 }else if(!datum.trim().equals("") && regel==3){
699 //Neuanlage
700 if(neuanlage){
701 if(DatFunk.TageDifferenz(datum,DatFunk.sHeute() ) < 0){
702 return false;
704 return true;
706 //Tage holen
707 tage = RezTools.holeEinzelTermineAusRezept(null, rezvec.get(34));
708 if(tage.size()==0 ){
709 //keine Tage vorhanden und Datum heute >= Regeldatum
710 if(DatFunk.TageDifferenz(datum,DatFunk.sHeute() ) < 0){
711 return false;
713 return true;
714 }else if(tage.size() > 0 ){
715 //Tage vorhanden dann Datum testen ob irgend ein Datum >=
716 for(int i = 0; i < tage.size();i++){
717 if(DatFunk.TageDifferenz(datum, tage.get(i)) >= 0){
718 return true;
721 return false;
723 }else{
724 //Neuanlage
726 if(neuanlage){
727 if(DatFunk.TageDifferenz(datum,DatFunk.sHeute() ) < 0){
728 return false;
730 return true;
733 //Bei Regel 4
734 if(!datum.trim().equals("") && regel==4){
735 if(DatFunk.TageDifferenz(datum,DatFunk.sHeute() ) < 0){
736 return false;
739 return true;
741 }catch(Exception ex){
742 ex.printStackTrace();
744 //Bei Regel 0 oder wenn alles nicht zutrifft
745 return true;
748 public static int testeRezGebArt(boolean testefuerbarcode,boolean hintergrund,String srez,String termine){
749 int iret = 0;
750 Vector<String> vAktTermine = null;
751 boolean bTermine = false;
752 //int iTermine = -1;
753 boolean u18Test = false;
754 boolean bMitJahresWechsel = false;
755 ZuzahlModell zm = new ZuzahlModell();
756 //Vector<String> patvec = SqlInfo.holeSatz("pat5", "geboren,jahrfrei", "pat_intern='"+xvec.get(1)+"'", Arrays.asList(new String[] {}));
757 //String patGeboren = datFunk.sDatInDeutsch(patvec.get(0));
758 //String patJahrfrei = datFunk.sDatInDeutsch(patvec.get(0));
762 //1. Schritt haben wir bereits Termineintr�ge die man auswerten kann
763 if( (vAktTermine = holeEinzelTermineAusRezept("",termine)).size() > 0 ){
764 // Es gibt Termine in der Tabelle
765 bTermine = true;
766 //iTermine = vAktTermine.size();
767 if( ((String)vAktTermine.get(0)).substring(6).equals(SystemConfig.vorJahr)){
768 bMitJahresWechsel = true;
770 if(DatFunk.Unter18(vAktTermine.get(0),
771 DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(4)))){
772 //System.out.println(vAktTermine);
773 u18Test = true;
778 //System.out.println(vAktTermine);
779 for(int i = 0;i < 1;i++){
781 if(Integer.parseInt(((String)Reha.thisClass.patpanel.vecaktrez.get(63))) <= 0){
782 // Kasse erfordert keine Zuzahlung
783 //System.out.println("Kasse erfordert keine Zuzahlung");
784 zm.allefrei = true;
785 iret = 0;
786 break;
788 if(Integer.parseInt(((String)Reha.thisClass.patpanel.vecaktrez.get(39))) == 1){
789 // Hat bereits bezahlt normal behandeln (zzstatus == 1)
790 //System.out.println("Hat bereits bezahlt normal behandeln (zzstatus == 1)");
791 zm.allezuzahl = true;
792 iret = 2;
793 //break;
796 /************************ Jetzt der Ober-Scheißdreck für den Achtzehner-Test***********************/
797 if( ((Boolean) ((String)Reha.thisClass.patpanel.vecaktrez.get(60)).equals("T")) || (u18Test)){
798 // Es ist ein unter 18 Jahre Test notwendig
799 //System.out.println("Es ist ein unter 18 Jahre Test notwendig");
800 if(bTermine){
802 int [] test = ZuzahlTools.terminNachAchtzehn(vAktTermine,DatFunk.sDatInDeutsch((String)Reha.thisClass.patpanel.patDaten.get(4)));
803 if( test[0] > 0 ){
804 //muß zuzahlen
805 //System.out.println("Parameter 1 = "+test[0]);
806 //System.out.println("Parameter 2 = "+test[1]);
808 zm.allefrei = false;
809 if(test[1] > 0){
810 zm.allefrei = false;
811 zm.allezuzahl = false;
812 zm.anfangfrei = true;
813 zm.teil1 = test[1];
814 zm.teil2 = maxAnzahl()-test[1];
815 //System.out.println("Splitten frei für "+test[1]+" Tage, bezahlen für "+(maxAnzahl()-test[1]));
816 iret = 1;
817 }else{
818 zm.allezuzahl = true;
819 zm.teil1 = test[1];
820 //System.out.println("Jeden Termin bezahlen insgesamt bezahlen für "+(maxAnzahl()-test[1]));
821 iret = 2;
823 }else{
824 //Voll befreit
825 //System.out.println("Frei für "+test[1]+" Tage - also alle");
826 zm.allefrei = true;
827 iret = 0;
829 }else{
830 //Es stehen keine Termine für Analyse zur Verfügung also muß das Fenster für manuelle Eingabe geöffnet werden!!
831 String geburtstag = DatFunk.sDatInDeutsch(Reha.thisClass.patpanel.patDaten.get(4));
832 String stichtag = DatFunk.sHeute().substring(0,6)+Integer.valueOf(Integer.valueOf(SystemConfig.aktJahr)-18).toString();
833 if(DatFunk.TageDifferenz(geburtstag ,stichtag) >= 0 ){
834 //System.out.println("Normale Zuzahlung....");
835 zm.allefrei = false;
836 zm.allezuzahl = true;
837 iret = 2;
838 }else{
839 //System.out.println("Alle Frei....");
840 zm.allefrei = true;
841 zm.allezuzahl = false;
842 iret = 0;
845 //iret = 1;
846 break;
849 /************************ Keine Befreiung Aktuell und keine Vorjahr (Normalfall************************/
850 if((boolean) ((String)Reha.thisClass.patpanel.patDaten.get(30)).equals("F") &&
851 (((String)Reha.thisClass.patpanel.patDaten.get(69)).trim().equals("")) ){
852 // Es liegt weder eine Befreiung für dieses noch für letztes Jahr vor.
853 // Standard
854 //System.out.println("Es liegt weder eine Befreiung für dieses noch für letztes Jahr vor.");
855 iret = 2;
856 break;
858 /************************ Aktuell Befreit und im Vorjahr auch befreit************************/
859 if((boolean) ((String)Reha.thisClass.patpanel.patDaten.get(30)).equals("T") &&
860 (!((String)Reha.thisClass.patpanel.patDaten.get(69)).equals("")) ){
861 // Es liegt eine Befreiung vor und im Vorjahr ebenfenfalls befreit
862 //System.out.println("Es liegt eine Befreiung vor und im Vorjahr ebenfenfalls befreit");
863 iret = 0;
864 break;
866 /************************ aktuell Nicht frei, Vorjahr frei************************/
867 if((boolean) (((String)Reha.thisClass.patpanel.patDaten.get(30)).equals("F")) &&
868 (!((String)Reha.thisClass.patpanel.patDaten.get(69)).equals("")) ){
869 //System.out.println("aktuell Nicht frei, Vorjahr frei");
870 if(!bMitJahresWechsel){//Alle Termine aktuell
871 iret = 2;
872 }else{// es gibt Termine im Vorjahr
873 Object[] obj = JahresWechsel(vAktTermine,SystemConfig.vorJahr);
874 if(!(Boolean)obj[0]){// alle Termine waren im Vorjahr
875 //System.out.println("1 - Termine aus dem Vorjahr(frei) = "+obj[1]+" Termine aus diesem Jahr(Zuzahlung) = "+obj[2]);
876 if(vAktTermine.size() < maxAnzahl()){
877 String meldung = "<html>Während der Befreiung wurden <b>"+Integer.toString(vAktTermine.size())+" von "+
878 Integer.toString(maxAnzahl())+" Behandlungen</b> durchgeführt!<br>"+
879 "Rezeptgebühren müssen also noch für <b>"+Integer.toString(maxAnzahl()-vAktTermine.size())+" Behandlungen</b> entrichtet werden.<br>"+
880 "<br><br>Ist das korrekt?<br><br></html>";
881 int anfrage = JOptionPane.showConfirmDialog(null, meldung, "Achtung wichtige Benutzeranfrage", JOptionPane.YES_NO_CANCEL_OPTION);
882 if(anfrage == JOptionPane.YES_OPTION){
883 zm.allefrei = false;
884 zm.allezuzahl = false;
885 zm.anfangfrei = true;
886 zm.teil1 = vAktTermine.size();
887 zm.teil2 = maxAnzahl()-vAktTermine.size();
888 iret = 1;
889 }else if(anfrage == JOptionPane.CANCEL_OPTION){
890 return -1;
892 }else{
893 Object ret = JOptionPane.showInputDialog(null, "Geben Sie bitte die Anzahl Behandlungen ein für die\nRezeptgebühren berechnet werden sollen:", Integer.toString(maxAnzahl()-vAktTermine.size()));
894 if(ret == null){
895 //iret = 0;
896 return -1;
897 }else{
898 zm.allefrei = false;
899 zm.allezuzahl = false;
900 zm.anfangfrei = true;
901 zm.teil1 = maxAnzahl()-Integer.parseInt((String)ret);
902 zm.teil2 = Integer.parseInt((String)ret);
903 iret = 1;
906 }else{
907 iret = 0;
910 }else{// gemischte Termine
911 //System.out.println("2 -Termine aus dem Vorjahr(frei) = "+obj[1]+" Termine aus diesem Jahr(Zuzahlung) = "+obj[2]);
912 zm.allefrei = false;
913 zm.allezuzahl = false;
914 zm.anfangfrei = true;
915 zm.teil1 = (Integer)obj[1];
916 zm.teil2 = (Integer)obj[2];
917 iret = 1;
920 break;
922 /************************Aktuelle Befreiung aber nicht im Vorjahr************************/
923 // Fehler !!!!!!!!!!!!!!!!!!!!!!! muß korrigiert werden!!!!!!!!!!!!!!!!!!!!!!!
924 if((boolean) ((String)Reha.thisClass.patpanel.patDaten.get(30)).equals("T") &&
925 (((String)Reha.thisClass.patpanel.vecaktrez.get(59)).trim().equals("")) ){
926 //System.out.println("Aktuelle Befreiung aber nicht im Vorjahr");
927 if(!bMitJahresWechsel){//Alle Termine aktuell
928 iret = 0;
929 }else{// es gibt Termine im Vorjahr
930 Object[] obj = JahresWechsel(vAktTermine,SystemConfig.vorJahr);
931 if(!(Boolean)obj[0]){// alle Termine waren im Vorjahr
932 iret = 2;
933 }else{// gemischte Termine
934 //System.out.println("Termine aus dem Vorjahr(Zuzahlung) = "+obj[1]+" Termine aus diesem Jahr(frei) = "+obj[2]);
935 zm.allefrei = false;
936 zm.allezuzahl = false;
937 zm.anfangfrei = false;
938 zm.teil1 = (Integer)obj[1];
939 zm.teil2 = (Integer)obj[2];
940 iret = 3;
943 break;
948 zm.hausbesuch = ((String)Reha.thisClass.patpanel.vecaktrez.get(43)).equals("T");
949 zm.hbvoll = ((String)Reha.thisClass.patpanel.vecaktrez.get(61)).equals("T");
950 zm.hbheim = ((String)Reha.thisClass.patpanel.patDaten.get(44)).equals("T");
951 zm.km = StringTools.ZahlTest(((String)Reha.thisClass.patpanel.patDaten.get(48)));
952 zm.preisgruppe = Integer.parseInt(((String)Reha.thisClass.patpanel.vecaktrez.get(41)));
953 zm.gesamtZahl = Integer.parseInt(((String)Reha.thisClass.patpanel.vecaktrez.get(64)));
954 //Hausbesuch als logischen wert
955 //System.out.println("Rückgabewert iret = "+iret);
956 if(iret==0){
957 if(testefuerbarcode){
958 constructGanzFreiRezHMap(zm);
959 constructNormalRezHMap(zm,false);
960 SystemConfig.hmAdrRDaten.put("<Rendbetrag>", "0,00" );
961 }else{
962 constructGanzFreiRezHMap(zm);
965 if(iret==1){
966 constructAnfangFreiRezHMap(zm,true);
968 if(iret==2){
969 constructNormalRezHMap(zm,false);
971 if(iret==3){
972 constructEndeFreiRezHMap(zm,false);
975 System.out.println(macheUmsatzZeile(
976 SqlInfo.holeFelder("select * from verordn where rez_nr='"+
977 Reha.thisClass.patpanel.vecaktrez.get(1)+"' LIMIT 1"),"")
980 //System.out.println("ZZ-Variante = "+iret);
981 return iret;
983 /************
992 public static void constructNormalRezHMap(ZuzahlModell zm,boolean unregelmaessig){
993 /************************************/
994 //System.out.println("*****In Normal HMap*********");
995 Double rezgeb = new Double(0.000);
996 BigDecimal[] preise = {null,null,null,null};
997 BigDecimal xrezgeb = BigDecimal.valueOf(new Double(0.000));
999 ////System.out.println("nach nullzuweisung " +xrezgeb.toString());
1000 int[] anzahl = {0,0,0,0};
1001 int[] artdbeh = {0,0,0,0};
1002 int i;
1004 BigDecimal einzelpreis = null;
1005 BigDecimal poswert = null;
1006 BigDecimal rezwert = BigDecimal.valueOf(new Double(0.000));
1007 BigDecimal preistest = null;
1008 String stmt = null;
1009 String meldung = null;
1010 DecimalFormat dfx = new DecimalFormat( "0.00" );
1011 String xdiszi = RezTools.putRezNrGetDisziplin(Reha.thisClass.patpanel.vecaktrez.get(1));
1012 int xpreisgr = Integer.parseInt(Reha.thisClass.patpanel.vecaktrez.get(41))-1;
1013 String xrezdatum = DatFunk.sDatInDeutsch((String)Reha.thisClass.patpanel.vecaktrez.get(2));
1015 SystemConfig.hmAdrRDaten.put("<Rid>",(String)Reha.thisClass.patpanel.vecaktrez.get(35) );
1016 SystemConfig.hmAdrRDaten.put("<Rnummer>",(String)Reha.thisClass.patpanel.vecaktrez.get(1) );
1017 SystemConfig.hmAdrRDaten.put("<Rdatum>",DatFunk.sDatInDeutsch((String)Reha.thisClass.patpanel.vecaktrez.get(2)) );
1018 boolean neuerpreis = neuePreisNachRezeptdatumOderStichtag(xdiszi,xpreisgr,xrezdatum,false,Reha.thisClass.patpanel.vecaktrez);
1019 //System.out.println("Neuer Preis = "+neuerpreis+"\n");
1021 for(i = 0;i < 4;i++){
1022 anzahl[i] = Integer.valueOf((String)Reha.thisClass.patpanel.vecaktrez.get(i+3));
1023 artdbeh[i] = Integer.valueOf((String)Reha.thisClass.patpanel.vecaktrez.get(i+8));
1024 if(!neuerpreis){
1025 if(artdbeh[i] > 0){
1026 preise[i] = BigDecimal.valueOf(new Double(RezTools.getPreisAltFromID(Integer.toString(artdbeh[i]), Integer.toString(xpreisgr), SystemPreislisten.hmPreise.get(xdiszi).get(xpreisgr))));
1027 }else{
1028 preise[i] = BigDecimal.valueOf(new Double("0.00"));
1030 }else{
1031 try{
1032 if(artdbeh[i] > 0){
1033 preistest = BigDecimal.valueOf(new Double((String)Reha.thisClass.patpanel.vecaktrez.get(i+18)));
1034 preise[i] = BigDecimal.valueOf(new Double(RezTools.getPreisAktFromID(Integer.toString(artdbeh[i]), Integer.toString(xpreisgr), SystemPreislisten.hmPreise.get(xdiszi).get(xpreisgr))));
1035 if( (preistest.compareTo(preise[i]) != 0) ){
1036 meldung = "Achtung Unterschiedliche Preise!!!\n\n"+
1037 "Im Rezept gespeicherter Preis für Position "+(String)Reha.thisClass.patpanel.vecaktrez.get(48+i)+" = "+dfx.format(preistest)+"\n"+
1038 "In der Preisliste gespeicherter Preis für Position "+(String)Reha.thisClass.patpanel.vecaktrez.get(48+i)+" = "+dfx.format(preise[i])+"\n\n"+
1039 "Vermutete Ursache: Die Preisliste wurde nach der Rezeptanlage aktualisiert\n"+
1040 "Berechung erfolgt mit dem Preis aus der Preisliste, Rezept wird aktualisiert!";
1041 JOptionPane.showMessageDialog(null,meldung);
1042 stmt = "update verordn set preise"+Integer.toString(i+1)+"='"+dfx.format(preise[i]).replace(",",".")+"' where id='"+Reha.thisClass.patpanel.vecaktrez.get(35)+"' LIMIT 1";
1043 ///System.out.println(stmt);
1044 SqlInfo.sqlAusfuehren(stmt);
1046 }else{
1047 preise[i] = BigDecimal.valueOf(new Double("0.00"));
1049 }catch(Exception ex){
1050 preise[i] = BigDecimal.valueOf(new Double((String)Reha.thisClass.patpanel.vecaktrez.get(i+18)));
1056 xrezgeb = xrezgeb.add(BigDecimal.valueOf(new Double(10.00)));
1057 rezgeb = 10.00;
1058 ////System.out.println("nach 10.00 zuweisung " +rezgeb.toString());
1059 // String runden;
1061 BigDecimal endpos;
1062 SystemConfig.hmAdrRDaten.put("<Rnummer>",(String)Reha.thisClass.patpanel.vecaktrez.get(1) );
1063 SystemConfig.hmAdrRDaten.put("<Rpatid>",(String)Reha.thisClass.patpanel.vecaktrez.get(0) );
1064 SystemConfig.hmAdrRDaten.put("<Rdatum>",DatFunk.sDatInDeutsch( (String)Reha.thisClass.patpanel.vecaktrez.get(2)) );
1065 SystemConfig.hmAdrRDaten.put("<Rpauschale>",dfx.format(rezgeb) );
1067 for(i = 0; i < 4; i++){
1069 //System.out.println(Integer.valueOf(anzahl[i]).toString()+" / "+
1070 Integer.valueOf(artdbeh[i]).toString()+" / "+
1071 preise[i].toString() );
1073 if(artdbeh[i] > 0){
1074 SystemConfig.hmAdrRDaten.put("<Rposition"+(i+1)+">",(String)Reha.thisClass.patpanel.vecaktrez.get(48+i) );
1076 SystemConfig.hmAdrRDaten.put("<Rpreis"+(i+1)+">", dfx.format(preise[i]) );
1078 einzelpreis = preise[i].divide(BigDecimal.valueOf(new Double(10.000)));
1080 poswert = preise[i].multiply(BigDecimal.valueOf(new Double(anzahl[i])));
1081 rezwert = rezwert.add(poswert);
1082 ////System.out.println("Einzelpreis "+i+" = "+einzelpreis);
1083 BigDecimal testpr = einzelpreis.setScale(2, BigDecimal.ROUND_HALF_UP);
1084 ////System.out.println("test->Einzelpreis "+i+" = "+testpr);
1086 SystemConfig.hmAdrRDaten.put("<Rproz"+(i+1)+">", dfx.format(testpr) );
1087 SystemConfig.hmAdrRDaten.put("<Ranzahl"+(i+1)+">", Integer.valueOf(anzahl[i]).toString() );
1089 endpos = testpr.multiply(BigDecimal.valueOf(new Double(anzahl[i])));
1090 SystemConfig.hmAdrRDaten.put("<Rgesamt"+(i+1)+">", dfx.format(endpos) );
1091 rezgeb = rezgeb + endpos.doubleValue();
1092 ////System.out.println(rezgeb.toString());
1094 }else{
1095 SystemConfig.hmAdrRDaten.put("<Rposition"+(i+1)+">","----");
1096 SystemConfig.hmAdrRDaten.put("<Rpreis"+(i+1)+">", "0,00" );
1097 SystemConfig.hmAdrRDaten.put("<Rproz"+(i+1)+">", "0,00");
1098 SystemConfig.hmAdrRDaten.put("<Rgesamt"+(i+1)+">", "0,00" );
1099 SystemConfig.hmAdrRDaten.put("<Ranzahl"+(i+1)+">", "----" );
1103 //System.out.println(SystemConfig.hmAdrRDaten);
1104 /*****************************************************/
1105 if(zm.hausbesuch){ //Hausbesuch
1106 Object[] obi = hbNormal(zm,rezwert,rezgeb,Integer.valueOf(((String)Reha.thisClass.patpanel.vecaktrez.get(64))),neuerpreis);
1107 rezwert = ((BigDecimal)obi[0]);
1108 rezgeb = (Double)obi[1];
1112 /*****************************************************/
1113 Double drezwert = rezwert.doubleValue();
1114 SystemConfig.hmAdrRDaten.put("<Rendbetrag>", dfx.format(rezgeb) );
1115 SystemConfig.hmAdrRDaten.put("<Rwert>", dfx.format(drezwert) );
1116 DecimalFormat df = new DecimalFormat( "0.00" );
1117 df.format( rezgeb);
1118 ////System.out.println("----------------------------------------------------");
1119 ////System.out.println("Endgültige und geparste Rezeptgebühr = "+s+" EUR");
1120 ////System.out.println(SystemConfig.hmAdrRDaten);
1121 /***********************/
1123 // Hier muß noch Hausbesuchshandling eingebaut werden
1124 // Ebenso das Wegegeldhandling
1128 public static void constructRawHMap(){
1129 new SwingWorker<Void,Void>(){
1130 @Override
1131 protected Void doInBackground() throws Exception {
1132 try{
1133 DecimalFormat df = new DecimalFormat( "0.00" );
1134 String diszi = RezTools.putRezNrGetDisziplin((String)Reha.thisClass.patpanel.vecaktrez.get(1));
1136 int pg = Integer.parseInt((String)Reha.thisClass.patpanel.vecaktrez.get(41))-1;
1137 String id = "";
1138 SystemConfig.hmAdrRDaten.put("<Rid>",(String)Reha.thisClass.patpanel.vecaktrez.get(35) );
1139 SystemConfig.hmAdrRDaten.put("<Rnummer>",(String)Reha.thisClass.patpanel.vecaktrez.get(1) );
1140 SystemConfig.hmAdrRDaten.put("<Rdatum>",DatFunk.sDatInDeutsch((String)Reha.thisClass.patpanel.vecaktrez.get(2)) );
1142 for(int i = 0;i<4;i++){
1143 id = (String)Reha.thisClass.patpanel.vecaktrez.get(8+i);
1144 SystemConfig.hmAdrRDaten.put("<Rposition"+(i+1)+">",(String)Reha.thisClass.patpanel.vecaktrez.get(48+i));
1145 SystemConfig.hmAdrRDaten.put("<Rpreis"+(i+1)+">", (String)Reha.thisClass.patpanel.vecaktrez.get(18+i).replace(".",",") );
1146 SystemConfig.hmAdrRDaten.put("<Ranzahl"+(i+1)+">", (String)Reha.thisClass.patpanel.vecaktrez.get(3+i) );
1147 SystemConfig.hmAdrRDaten.put("<Rgesamt"+(i+1)+">", df.format( ((BigDecimal)BigDecimal.valueOf(Double.valueOf(SystemConfig.hmAdrRDaten.get("<Ranzahl"+(i+1)+">"))).multiply(BigDecimal.valueOf(Double.valueOf(SystemConfig.hmAdrRDaten.get("<Rpreis"+(i+1)+">").replace(",","."))))).doubleValue() ));
1148 if(!id.equals("0")){
1149 SystemConfig.hmAdrRDaten.put("<Rkuerzel"+(i+1)+">", RezTools.getKurzformFromID(id, SystemPreislisten.hmPreise.get(diszi).get(pg) ) );
1150 SystemConfig.hmAdrRDaten.put("<Rlangtext"+(i+1)+">", RezTools.getLangtextFromID(id, "", SystemPreislisten.hmPreise.get(diszi).get(pg) ) );
1151 }else{
1152 SystemConfig.hmAdrRDaten.put("<Rkuerzel"+(i+1)+">", "");
1153 SystemConfig.hmAdrRDaten.put("<Rlangtext"+(i+1)+">", "");
1156 //Hausbesuche
1157 if( ((String)Reha.thisClass.patpanel.vecaktrez.get(43)).equals("T") ){
1158 SystemConfig.hmAdrRDaten.put("<Rhbpos>", SystemPreislisten.hmHBRegeln.get(diszi).get(pg).get(0));
1159 SystemConfig.hmAdrRDaten.put("<Rhbanzahl>",(String)Reha.thisClass.patpanel.vecaktrez.get(64) );
1160 SystemConfig.hmAdrRDaten.put("<Rhbpreis>",RezTools.getPreisAktFromPos(SystemConfig.hmAdrRDaten.get("<Rhbpos>"), "", SystemPreislisten.hmPreise.get(diszi).get(pg)).replace(".",",") );
1161 SystemConfig.hmAdrRDaten.put("<Rwegpos>", SystemPreislisten.hmHBRegeln.get(diszi).get(pg).get(2));
1162 SystemConfig.hmAdrRDaten.put("<Rweganzahl>",(String)Reha.thisClass.patpanel.vecaktrez.get(7) );
1163 SystemConfig.hmAdrRDaten.put("<Rwegpreis>",RezTools.getPreisAktFromPos(SystemConfig.hmAdrRDaten.get("<Rwegpos>"), "", SystemPreislisten.hmPreise.get(diszi).get(pg)).replace(".",",") );
1164 }else{
1165 SystemConfig.hmAdrRDaten.put("<Rhbpos>", "");
1166 SystemConfig.hmAdrRDaten.put("<Rhbanzahl>","");
1167 SystemConfig.hmAdrRDaten.put("<Rhbpreis>","");
1168 SystemConfig.hmAdrRDaten.put("<Rwegpos>", "");
1169 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","");
1170 SystemConfig.hmAdrRDaten.put("<Rwegpreis>","");
1172 }catch(Exception ex){
1173 ex.printStackTrace();
1175 return null;
1177 }.execute();
1179 public static void constructGanzFreiRezHMap(ZuzahlModell zm){
1180 SystemConfig.hmAdrRDaten.put("<Rid>",(String)Reha.thisClass.patpanel.vecaktrez.get(35) );
1181 SystemConfig.hmAdrRDaten.put("<Rnummer>",(String)Reha.thisClass.patpanel.vecaktrez.get(1) );
1182 SystemConfig.hmAdrRDaten.put("<Rdatum>",DatFunk.sDatInDeutsch((String)Reha.thisClass.patpanel.vecaktrez.get(2)) );
1183 SystemConfig.hmAdrRDaten.put("<Rpatid>",(String)Reha.thisClass.patpanel.vecaktrez.get(0) );
1184 SystemConfig.hmAdrRDaten.put("<Rpauschale>","0,00");
1185 for(int i = 0;i<5;i++){
1186 SystemConfig.hmAdrRDaten.put("<Rposition"+(i+1)+">","----");
1187 SystemConfig.hmAdrRDaten.put("<Rpreis"+(i+1)+">", "0,00" );
1188 SystemConfig.hmAdrRDaten.put("<Rproz"+(i+1)+">", "0,00");
1189 SystemConfig.hmAdrRDaten.put("<Rgesamt"+(i+1)+">", "0,00" );
1190 SystemConfig.hmAdrRDaten.put("<Ranzahl"+(i+1)+">", "----" );
1192 SystemConfig.hmAdrRDaten.put("<Rhbpos>","----");
1193 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", "0,00");
1194 SystemConfig.hmAdrRDaten.put("<Rhbproz>", "0,00");
1195 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", "0,00");
1196 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
1197 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
1198 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
1199 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
1200 SystemConfig.hmAdrRDaten.put("<Rendbetrag>", "0,00" );
1201 SystemConfig.hmAdrRDaten.put("<Rwert>", "0,00" );
1203 public static void constructAnfangFreiRezHMap(ZuzahlModell zm,boolean anfang){
1204 try{
1205 //System.out.println("*****In Anfang-frei*********");
1206 if(anfang){
1207 zm.gesamtZahl = Integer.valueOf(zm.teil2);
1208 //System.out.println("Restliche Behandlungen berechnen = "+zm.gesamtZahl);
1209 }else{
1210 zm.gesamtZahl = Integer.valueOf(zm.teil1);
1211 //System.out.println("Beginn der Behandlung berechnen = "+zm.gesamtZahl);
1213 }catch(Exception ex){
1214 ex.printStackTrace();
1217 Double rezgeb = new Double(0.000);
1218 BigDecimal[] preise = {null,null,null,null};
1219 BigDecimal xrezgeb = BigDecimal.valueOf(new Double(0.000));
1221 String xdiszi = RezTools.putRezNrGetDisziplin(Reha.thisClass.patpanel.vecaktrez.get(1));
1222 int xpreisgr = Integer.parseInt(Reha.thisClass.patpanel.vecaktrez.get(41))-1;
1223 String xrezdatum = DatFunk.sDatInDeutsch((String)Reha.thisClass.patpanel.vecaktrez.get(2));
1224 boolean neuerpreis = neuePreisNachRezeptdatumOderStichtag(xdiszi,xpreisgr,xrezdatum,false,Reha.thisClass.patpanel.vecaktrez);
1227 ////System.out.println("nach nullzuweisung " +xrezgeb.toString());
1228 int[] anzahl = {0,0,0,0};
1229 int[] artdbeh = {0,0,0,0};
1230 /***************/ //Einbauen für Barcode
1231 int[] gesanzahl = {0,0,0,0};
1232 int i;
1233 BigDecimal einzelpreis = null;
1234 BigDecimal poswert = null;
1235 BigDecimal rezwert = BigDecimal.valueOf(new Double(0.000));
1236 SystemConfig.hmAdrRDaten.put("<Rid>",(String)Reha.thisClass.patpanel.vecaktrez.get(35) );
1237 SystemConfig.hmAdrRDaten.put("<Rnummer>",(String)Reha.thisClass.patpanel.vecaktrez.get(1) );
1238 SystemConfig.hmAdrRDaten.put("<Rdatum>",(String)Reha.thisClass.patpanel.vecaktrez.get(2) );
1239 for(i = 0;i < 4;i++){
1240 gesanzahl[i] = Integer.valueOf((String)Reha.thisClass.patpanel.vecaktrez.get(i+3));
1241 anzahl[i] = Integer.valueOf((String)Reha.thisClass.patpanel.vecaktrez.get(i+3));
1242 if(! (anzahl[i] < zm.gesamtZahl)){
1243 anzahl[i] = Integer.valueOf(zm.gesamtZahl);
1245 artdbeh[i] = Integer.valueOf((String)Reha.thisClass.patpanel.vecaktrez.get(i+8));
1246 /****/
1247 if(!neuerpreis){
1248 if(artdbeh[i] > 0){
1249 preise[i] = BigDecimal.valueOf(new Double(RezTools.getPreisAltFromID(Integer.toString(artdbeh[i]), Integer.toString(xpreisgr), SystemPreislisten.hmPreise.get(xdiszi).get(xpreisgr))));
1250 }else{
1251 preise[i] = BigDecimal.valueOf(new Double("0.00"));
1253 }else{
1254 preise[i] = BigDecimal.valueOf(new Double((String)Reha.thisClass.patpanel.vecaktrez.get(i+18)));
1256 //preise[i] = BigDecimal.valueOf(new Double((String)Reha.thisClass.patpanel.vecaktrez.get(i+18)));
1257 /****/
1259 xrezgeb = xrezgeb.add(BigDecimal.valueOf(new Double(10.00)));
1260 if(anfang){
1261 rezgeb = 00.00;
1262 }else{
1263 rezgeb = 10.00;
1267 ////System.out.println("nach 10.00 zuweisung " +rezgeb.toString());
1268 //String runden;
1269 DecimalFormat dfx = new DecimalFormat( "0.00" );
1270 BigDecimal endpos;
1271 SystemConfig.hmAdrRDaten.put("<Rnummer>",(String)Reha.thisClass.patpanel.vecaktrez.get(1) );
1272 SystemConfig.hmAdrRDaten.put("<Rpatid>",(String)Reha.thisClass.patpanel.vecaktrez.get(0) );
1273 SystemConfig.hmAdrRDaten.put("<Rdatum>",DatFunk.sDatInDeutsch( (String)Reha.thisClass.patpanel.vecaktrez.get(2) ) );
1274 SystemConfig.hmAdrRDaten.put("<Rpauschale>",dfx.format(rezgeb) );
1276 for(i = 0; i < 4; i++){
1278 //System.out.println(Integer.valueOf(anzahl[i]).toString()+" / "+
1279 Integer.valueOf(artdbeh[i]).toString()+" / "+
1280 preise[i].toString() );
1282 if(artdbeh[i] > 0){
1283 SystemConfig.hmAdrRDaten.put("<Rposition"+(i+1)+">",(String)Reha.thisClass.patpanel.vecaktrez.get(48+i) );
1284 SystemConfig.hmAdrRDaten.put("<Rpreis"+(i+1)+">", dfx.format(preise[i]) );
1286 einzelpreis = preise[i].divide(BigDecimal.valueOf(new Double(10.000)));
1287 //***********vorher nur anzahl[]*****************/
1288 poswert = preise[i].multiply(BigDecimal.valueOf(new Double(gesanzahl[i])));
1289 rezwert = rezwert.add(poswert);
1290 ////System.out.println("Einzelpreis "+i+" = "+einzelpreis);
1291 BigDecimal testpr = einzelpreis.setScale(2, BigDecimal.ROUND_HALF_UP);
1292 ////System.out.println("test->Einzelpreis "+i+" = "+testpr);
1294 SystemConfig.hmAdrRDaten.put("<Rproz"+(i+1)+">", dfx.format(testpr) );
1295 SystemConfig.hmAdrRDaten.put("<Ranzahl"+(i+1)+">", Integer.toString(anzahl[i]) );
1297 endpos = testpr.multiply(BigDecimal.valueOf(new Double(anzahl[i])));
1298 SystemConfig.hmAdrRDaten.put("<Rgesamt"+(i+1)+">", dfx.format(endpos) );
1299 rezgeb = rezgeb + endpos.doubleValue();
1300 ////System.out.println(rezgeb.toString());
1302 }else{
1303 SystemConfig.hmAdrRDaten.put("<Rposition"+(i+1)+">","----");
1304 SystemConfig.hmAdrRDaten.put("<Rpreis"+(i+1)+">", "0,00" );
1305 SystemConfig.hmAdrRDaten.put("<Rproz"+(i+1)+">", "0,00");
1306 SystemConfig.hmAdrRDaten.put("<Rgesamt"+(i+1)+">", "0,00" );
1307 SystemConfig.hmAdrRDaten.put("<Ranzahl"+(i+1)+">", "----" );
1311 /*****************************************************/
1312 if(zm.hausbesuch){ //Hausbesuch
1313 if(zm.gesamtZahl > Integer.valueOf(((String)Reha.thisClass.patpanel.vecaktrez.get(64)))){
1314 zm.gesamtZahl = Integer.valueOf(((String)Reha.thisClass.patpanel.vecaktrez.get(64)));
1316 Object[] obi = hbNormal(zm,rezwert,rezgeb,Integer.valueOf(((String)Reha.thisClass.patpanel.vecaktrez.get(64))),neuerpreis);
1317 rezwert = ((BigDecimal)obi[0]);
1318 rezgeb = (Double)obi[1];
1320 /*****************************************************/
1321 Double drezwert = rezwert.doubleValue();
1322 SystemConfig.hmAdrRDaten.put("<Rendbetrag>", dfx.format(rezgeb) );
1323 SystemConfig.hmAdrRDaten.put("<Rwert>", dfx.format(drezwert) );
1324 DecimalFormat df = new DecimalFormat( "0.00" );
1325 df.format( rezgeb);
1326 //System.out.println("----------------------------------------------------");
1327 //System.out.println("Endgültige und geparste Rezeptgebühr = "+s+" EUR");
1328 ////System.out.println(SystemConfig.hmAdrRDaten);
1329 /***********************/
1333 public static void constructEndeFreiRezHMap(ZuzahlModell zm,boolean anfang){
1334 //System.out.println("*****Über Ende Frei*********");
1335 constructAnfangFreiRezHMap(zm,anfang);
1337 @SuppressWarnings("unchecked")
1338 public static Vector<Vector<String>>splitteTermine(String terms){
1339 Vector<Vector<String>> termine = new Vector<Vector<String>>();
1340 String[] tlines = terms.split("\n");
1341 int lines = tlines.length;
1342 ////System.out.println("Anzahl Termine = "+lines);
1343 Vector<String> tvec = new Vector<String>();
1344 String[] terdat = null;
1345 for(int i = 0;i<lines;i++){
1346 terdat = tlines[i].split("@");
1347 int ieinzel = terdat.length;
1348 if(ieinzel <= 1){
1349 return (Vector<Vector<String>>) termine.clone();
1351 ////System.out.println("Anzahl Splits = "+ieinzel);
1352 tvec.clear();
1353 for(int y = 0; y < ieinzel;y++){
1354 tvec.add((terdat[y].trim().equals("") ? " . . " : terdat[y]));
1356 termine.add((Vector<String>)tvec.clone());
1358 return (Vector<Vector<String>>) termine.clone();
1361 public static Object[] JahrEnthalten(Vector<String>vtage,String jahr){
1362 Object[] ret = {Boolean.valueOf(false),-1};
1363 for(int i = 0; i < vtage.size();i++){
1364 if( ((String)vtage.get(i)).equals(jahr) ){
1365 ret[0] = true;
1366 ret[1] = Integer.valueOf(i);
1367 break;
1370 return ret;
1372 public static Object[] JahresWechsel(Vector<String>vtage,String jahr){
1373 Object[] ret = {Boolean.valueOf(false),-1,-1};
1374 for(int i = 0; i < vtage.size();i++){
1375 if(!((String)vtage.get(i)).substring(6).equals(jahr) ){
1376 ret[0] = true;
1377 ret[1] = Integer.valueOf(i);
1378 ret[2] = maxAnzahl()-(Integer)ret[1];
1379 return ret;
1383 if(maxAnzahl() > vtage.size()){
1384 ret[0] = true;
1385 ret[1] = Integer.valueOf(vtage.size());
1386 ret[2] = maxAnzahl()-(Integer)ret[1];
1388 System.out.println("maximale Anzahl "+maxAnzahl());
1390 return ret;
1392 public static int maxAnzahl(){
1393 int ret = -1;
1394 int test;
1395 for(int i = 3; i < 7;i++){
1396 test = Integer.valueOf(((String)Reha.thisClass.patpanel.vecaktrez.get(i)));
1397 if(test > ret){
1398 ret = Integer.valueOf(test);
1401 return ret;
1403 public static String PreisUeberPosition(String position,int preisgruppe,String disziplin,boolean neu ){
1404 //JOptionPane.showMessageDialog(null, "Aufruf der Funktion PreisUeberPosition");
1405 String ret = null;
1406 Vector<?> preisvec = null;
1407 preisvec = SystemPreislisten.hmPreise.get(putRezNrGetDisziplin(disziplin)).get(preisgruppe-1);
1408 for(int i = 0; i < preisvec.size();i++){
1409 if( ((String)((Vector<?>)preisvec.get(i)).get(2)).equals(position) ){
1410 ret = ((String)((Vector<?>)preisvec.get(i)).get(3+(neu ? 0 : 1)));
1411 // //System.out.println("Der Preis von "+position+" = "+ret);
1412 return ret;
1415 ////System.out.println("Der Preis von "+position+" wurde nicht gefunden!!");
1416 return ret;
1419 public static String putRezNrGetDisziplin(String reznr){
1420 if(reznr.startsWith("KG")){
1421 return "Physio";
1422 }else if(reznr.startsWith("MA")){
1423 return "Massage";
1424 }else if(reznr.startsWith("ER")){
1425 return "Ergo";
1426 }else if(reznr.startsWith("LO")){
1427 return "Logo";
1428 }else if(reznr.startsWith("RH")){
1429 return "Reha";
1430 }else if(reznr.startsWith("PO")){
1431 return "Podo";
1433 return "Physio";
1435 public static Object[] ermittleRezeptwert(Vector<String> vec){
1436 Object[] retobj = {null,null,null};
1437 return retobj;
1439 public static Object[] ermittleHBwert(Vector<String> vec){
1440 Object[] retobj = {null,null,null};
1441 String disziplin = putRezNrGetDisziplin(vec.get(1));
1442 String pos = "";
1443 Double preis = 0.00;
1444 Double wgkm = (vec.get(7).equals("") ? 0.00 : Double.parseDouble(vec.get(7)) );
1446 @SuppressWarnings("unused")
1447 String pospauschale = "";
1448 Double preispauschale =0.00;
1449 //Double wgpauschal = 0.00;
1450 // erst testen ob HB-Einzeln oder HB-Mehrere
1451 int anzahl = Integer.parseInt(vec.get(64));
1452 int preisgruppe = Integer.parseInt(vec.get(41));
1453 if(vec.get(61).equals("T")){
1454 //Einzelhausbesuch
1455 pos = SystemPreislisten.hmHBRegeln.get(disziplin).get(preisgruppe-1).get(0);
1456 preis = Double.parseDouble(RezTools.getPreisAktFromPos(pos, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get(preisgruppe-1)));
1457 retobj[0] = BigDecimal.valueOf(preis).multiply(BigDecimal.valueOf(Double.parseDouble(Integer.toString(anzahl)))).doubleValue();
1458 //testen ob Fahrtgeldüberhaupt gezahlt wird;
1459 if(keineWeggebuehrBeiHB(disziplin,Integer.toString(preisgruppe))){
1460 return retobj;
1462 if(zweiPositionenBeiHB(disziplin,Integer.toString(preisgruppe))){
1463 //Weggebühr und pauschale
1464 /* In Betrieb bis 26.11.2010 *****************
1465 if( (wgkm=Double.parseDouble(vec.get(7))) > 7 ){
1466 //Kilometer verwenden
1467 pos = SystemPreislisten.hmHBRegeln.get(disziplin).get(preisgruppe-1).get(2);
1468 preis = Double.parseDouble(RezTools.getPreisAktFromPos(pos, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get(preisgruppe-1)));
1469 BigDecimal kms = BigDecimal.valueOf(preis).multiply(BigDecimal.valueOf(Double.parseDouble(Integer.toString(anzahl))));
1470 kms = kms.multiply(BigDecimal.valueOf(wgkm));
1471 retobj[1] = kms.doubleValue();
1472 return retobj;
1473 }else{
1474 //Pauschale verwenden
1475 pos = SystemPreislisten.hmHBRegeln.get(disziplin).get(preisgruppe-1).get(3);
1476 preis = Double.parseDouble(RezTools.getPreisAktFromPos(pos, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get(preisgruppe-1)));
1477 retobj[1] = BigDecimal.valueOf(preis).multiply(BigDecimal.valueOf(Double.parseDouble(Integer.toString(anzahl)))).doubleValue();
1478 return retobj;
1481 pos = SystemPreislisten.hmHBRegeln.get(disziplin).get(preisgruppe-1).get(2);
1482 preis = Double.parseDouble(RezTools.getPreisAktFromPos(pos, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get(preisgruppe-1)));
1483 BigDecimal kms = BigDecimal.valueOf(preis).multiply(BigDecimal.valueOf(Double.parseDouble(Integer.toString(anzahl))));
1484 kms = kms.multiply(BigDecimal.valueOf(wgkm));
1486 pospauschale = SystemPreislisten.hmHBRegeln.get(disziplin).get(preisgruppe-1).get(3);
1487 preispauschale = Double.parseDouble(RezTools.getPreisAktFromPos(pospauschale, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get(preisgruppe-1)));
1488 //System.out.println("kms="+kms);
1489 //System.out.println(BigDecimal.valueOf(preispauschale).multiply(BigDecimal.valueOf(Double.parseDouble(Integer.toString(anzahl)))));
1490 //System.out.println("pospauschale="+pospauschale);
1491 //System.out.println("preispauschale="+preispauschale);
1492 if(kms.doubleValue() > BigDecimal.valueOf(preispauschale).multiply(BigDecimal.valueOf(Double.parseDouble(Integer.toString(anzahl)))).doubleValue()){
1493 retobj[1] = kms.doubleValue();
1494 }else{
1495 retobj[1] = BigDecimal.valueOf(preispauschale).multiply(BigDecimal.valueOf(Double.parseDouble(Integer.toString(anzahl)))).doubleValue();
1497 return retobj;
1499 }else{
1500 //Mehrere Hausbesuch
1501 pos = SystemPreislisten.hmHBRegeln.get(disziplin).get(preisgruppe-1).get(1);
1502 preis = Double.parseDouble(RezTools.getPreisAktFromPos(pos, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get(preisgruppe-1)));
1503 retobj[0] = BigDecimal.valueOf(preis).multiply(BigDecimal.valueOf(Double.parseDouble(Integer.toString(anzahl)))).doubleValue();
1506 return retobj;
1508 public static Vector<String> macheUmsatzZeile(Vector<Vector<String>> vec,String tag,String kaluser){
1509 Vector<String> retvec = new Vector<String>();
1510 for(int i = 0; i < 13;i++){
1511 retvec.add("");
1514 String disziplin = putRezNrGetDisziplin(vec.get(0).get(1));
1515 String pos = "";
1516 String preis = "";
1517 String pospauschale = "";
1518 @SuppressWarnings("unused")
1519 String preispauschale = "";
1520 int preisgruppe = Integer.parseInt(vec.get(0).get(41));
1521 String termine = vec.get(0).get(34);
1522 boolean rezept = false;
1523 Double wgkm;
1524 int fehlerstufe = 0;
1525 int ipos = 0;
1526 String kform = "";
1527 String[] posbestaetigt = null;;
1528 Object[][] preisobj = {{null,null,null,null},{null,null,null,null}};
1529 /************************/
1530 //1. Termine aus Rezept holen
1531 String bestaetigte = vec.get(0).get(34);
1532 //2. Testen ob der Tag erfaßt wenn nicht weiter mit der vollen Packung + Fehlerstufe 1
1533 if(!termine.contains(tag)){
1534 fehlerstufe = 1;
1535 }else{
1536 //3. Sofern der Tagin der Termintabelle vorhanden ist,
1537 // die Positionen ermitteln
1538 // wenn keine Positionen vorhanden, weiter mit voller Packung + Fehlerstufe 2
1539 posbestaetigt = bestaetigte.substring(bestaetigte.indexOf(tag)).split("@")[3].split(",");
1540 if(posbestaetigt[0].trim().equals("")){
1541 fehlerstufe = 2;
1545 //4. Überprüfen ob die Positionen in der Tarifgruppe existieren,
1546 // sofern nicht, Preise und Positionen aus Rezept entnehmen, also volle Packung + Fehlerstufe 3
1547 if(fehlerstufe==0){
1548 for(int j = 0; j < posbestaetigt.length;j++){
1549 if(! posbestaetigt[j].trim().equals("")){
1550 if((kform=RezTools.getKurzformFromPos(posbestaetigt[j].trim(), Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get( (preisgruppe==0 ? 0 : preisgruppe-1) ))).equals("")){
1551 fehlerstufe = 3;
1552 break;
1554 preisobj[0][j] = kform;
1555 preisobj[1][j] = RezTools.getPreisAktFromPos(posbestaetigt[j], Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get( (preisgruppe==0 ? 0 : preisgruppe-1) ));
1560 if(fehlerstufe==0){
1561 //5. Wenn hier angekommen die Preise und Positionen aus der Preisliste entnehmen
1562 for(int j = 0; j < 4;j++){
1563 retvec.set(j,String.valueOf((String) (preisobj[0][j] != null ? preisobj[0][j] : "-----")));
1564 retvec.set(j+6,String.valueOf((String) (preisobj[1][j] != null ? preisobj[1][j] : "0.00")));
1566 retvec.set(12,"0");
1567 }else{
1568 for(int i = 0;i<4;i++){
1569 if(!vec.get(0).get(i+8).trim().equals("0")){
1570 pos = RezTools.getKurzformFromID(vec.get(0).get(i+8).trim(),SystemPreislisten.hmPreise.get(disziplin).get( (preisgruppe==0 ? 0 : preisgruppe-1) ));
1571 if(pos.trim().equals("")){
1572 pos = RezTools.getKurzformFromPos(vec.get(0).get(i+48).trim(), Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get( (preisgruppe==0 ? 0 : preisgruppe-1) ));
1574 retvec.set(i, pos);
1575 retvec.set(i+6,vec.get(0).get(i+18).trim());
1576 }else{
1577 retvec.set(i, "-----");
1578 retvec.set(i+6,"0.00");
1581 retvec.set(12,Integer.toString(fehlerstufe));
1583 /************************/
1584 //mit Hausbesuch?
1585 if(vec.get(0).get(43).equals("T")){
1586 //Hausbesuch einzeln?
1587 if(vec.get(0).get(61).equals("T")){
1588 pos = SystemPreislisten.hmHBRegeln.get(disziplin).get( (preisgruppe==0 ? 0 : preisgruppe-1) ).get(0);
1589 preis = RezTools.getPreisAktFromPos(pos, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get( (preisgruppe==0 ? 0 : preisgruppe-1) ));
1590 retvec.set(4, pos);
1591 retvec.set(10,preis);
1593 if(! keineWeggebuehrBeiHB(disziplin,Integer.toString((preisgruppe==0 ? 1 : preisgruppe)))){
1594 ////System.out.println("Kasse kennt Weggebühr...");
1595 if(zweiPositionenBeiHB(disziplin,Integer.toString((preisgruppe==0 ? 1 : preisgruppe)))){
1596 //Weggebühr und pauschale
1597 ////System.out.println("Kasse kennt km und Pauschale...");
1598 pos = SystemPreislisten.hmHBRegeln.get(disziplin).get((preisgruppe==0 ? 0 : preisgruppe-1)).get(2);
1599 pospauschale = SystemPreislisten.hmHBRegeln.get(disziplin).get((preisgruppe==0 ? 0 : preisgruppe-1)).get(3);
1600 wgkm = Double.parseDouble(vec.get(0).get(7));
1602 if( kmBesserAlsPauschale(pospauschale,pos,wgkm,preisgruppe,disziplin) ){
1603 //if( (wgkm=Double.parseDouble(vec.get(0).get(7))) > 7 ){
1604 //Kilometer verwenden
1605 ////System.out.println("Kilometer verwenden...");
1606 pos = SystemPreislisten.hmHBRegeln.get(disziplin).get((preisgruppe==0 ? 0 : preisgruppe-1)).get(2);
1607 preis = RezTools.getPreisAktFromPos(pos, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get((preisgruppe==0 ? 0 : preisgruppe-1)));
1608 BigDecimal kms = BigDecimal.valueOf(Double.parseDouble(preis)).multiply(BigDecimal.valueOf(wgkm));
1609 retvec.set(5, pos);
1610 retvec.set(11,Double.toString(kms.doubleValue()));
1611 ////System.out.println("Pos = "+pos);
1612 ////System.out.println("Preis = "+preis);
1613 }else{
1614 //Pauschale verwenden
1615 ////System.out.println("Pauschale verwenden....");
1616 pospauschale = SystemPreislisten.hmHBRegeln.get(disziplin).get((preisgruppe==0 ? 0 : preisgruppe-1)).get(3);
1617 preis = RezTools.getPreisAktFromPos(pospauschale, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get((preisgruppe==0 ? 0 : preisgruppe-1)));
1618 //System.out.println("Pos = "+pos);
1619 //System.out.println("Preis = "+preis);
1620 retvec.set(5, pospauschale);
1621 retvec.set(11,preis);
1623 }else{
1624 //System.out.println("Kann Weggebührmodalität nicht ermitteln....");
1627 }else{
1628 //System.out.println("Kasse kennt keine Weggebühr....");
1629 retvec.set(5, "-----");
1630 retvec.set(11,"0.00");
1632 }else{
1633 //Hausbesuch mit
1634 pos = SystemPreislisten.hmHBRegeln.get(disziplin).get((preisgruppe==0 ? 0 : preisgruppe-1)).get(1);
1635 preis =RezTools.getPreisAktFromPos(pos, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get((preisgruppe==0 ? 0 : preisgruppe-1)));
1636 retvec.set(4, pos);
1637 retvec.set(10,preis);
1638 retvec.set(5, "-----");
1639 retvec.set(11,"0.00");
1641 }else{
1642 retvec.set(4, "-----");
1643 retvec.set(10,"0.00");
1644 retvec.set(5, "-----");
1645 retvec.set(11,"0.00");
1647 return retvec;
1649 public static boolean kmBesserAlsPauschale(String pospauschal,String poskm,Double anzahlkm,int preisgruppe,String disziplin){
1650 String meldung = "";
1651 try{
1652 String preiskm;
1653 String preispauschal;
1654 meldung = " Pospauschal = "+pospauschal+"\n"+
1655 "PosKilometer = "+poskm+"\n"+
1656 " Anzahl km = "+anzahlkm+"\n"+
1657 " Preisgruppe = "+preisgruppe+"\n"+
1658 " Disziplin = "+disziplin;
1659 preiskm = RezTools.getPreisAktFromPos(poskm, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get((preisgruppe==0 ? 0 : preisgruppe-1)));
1660 BigDecimal kms = BigDecimal.valueOf(Double.parseDouble(preiskm)).multiply(BigDecimal.valueOf(anzahlkm));
1661 preispauschal = RezTools.getPreisAktFromPos(pospauschal, Integer.toString(preisgruppe), SystemPreislisten.hmPreise.get(disziplin).get((preisgruppe==0 ? 0 : preisgruppe-1)));
1662 BigDecimal pauschal = BigDecimal.valueOf(Double.parseDouble(preispauschal));
1663 return (kms.doubleValue() > pauschal.doubleValue());
1664 }catch(Exception ex){
1665 ex.printStackTrace();
1666 JOptionPane.showMessageDialog(null, "Fehler in der Ermittlung km-Abrechnung besser als Pauschale\n"+meldung);
1668 return false;
1670 public static Object[] hbNormal(ZuzahlModell zm, BigDecimal rezwert,Double rezgeb,int realhbAnz,boolean neuerpreis){
1671 //Object[] retobj = {new BigDecimal(new Double(0.00)),(Double)rezgeb};
1672 //((BigDecimal)retobj[0]).add(BigDecimal.valueOf(new Double(1.00)));
1673 //((BigDecimal) retobj[0]).add(new BigDecimal(rezwert));
1674 Object[] retobj = {(BigDecimal) rezwert,(Double)rezgeb};
1675 //System.out.println("Die tatsächlich HB-Anzahl = "+realhbAnz);
1676 //System.out.println("Der Rezeptwert zu Beginn = "+retobj[0]);
1677 if(zm.hausbesuch){ //Hausbesuch
1678 //System.out.println("Hausbesuch ist angesagt");
1679 //String[] praefix = {"1","2","5","3","MA","KG","ER","LO"};
1680 String rezid = SystemConfig.hmAdrRDaten.get("<Rnummer>").substring(0,2);
1682 String zz = SystemConfig.vHBRegeln.get(zm.preisgruppe-1).get(4);
1683 String kmgeld = SystemConfig.vHBRegeln.get(zm.preisgruppe-1).get(2);
1684 String kmpausch = SystemConfig.vHBRegeln.get(zm.preisgruppe-1).get(3);
1685 String hbpos = SystemConfig.vHBRegeln.get(zm.preisgruppe-1).get(0);
1686 String hbmit = SystemConfig.vHBRegeln.get(zm.preisgruppe-1).get(1);
1688 String zz = SystemPreislisten.hmHBRegeln.get(putRezNrGetDisziplin(rezid)).get(zm.preisgruppe-1).get(4);
1689 String kmgeld = SystemPreislisten.hmHBRegeln.get(putRezNrGetDisziplin(rezid)).get(zm.preisgruppe-1).get(2);
1690 String kmpausch = SystemPreislisten.hmHBRegeln.get(putRezNrGetDisziplin(rezid)).get(zm.preisgruppe-1).get(3);
1691 String hbpos = SystemPreislisten.hmHBRegeln.get(putRezNrGetDisziplin(rezid)).get(zm.preisgruppe-1).get(0);
1692 String hbmit = SystemPreislisten.hmHBRegeln.get(putRezNrGetDisziplin(rezid)).get(zm.preisgruppe-1).get(1);
1694 //für jede Disziplin eine anderes praefix
1695 //String ersatz = praefix[Arrays.asList(praefix).indexOf(rezid)-4];
1697 kmgeld = kmgeld.replaceAll("x",ersatz);
1698 kmpausch = kmpausch.replaceAll("x",ersatz);
1699 hbpos = hbpos.replaceAll("x",ersatz);
1700 hbmit = hbmit.replaceAll("x",ersatz);
1702 String preis = "";
1703 BigDecimal bdrezgeb;
1704 BigDecimal bdposwert;
1705 BigDecimal bdpreis;
1706 BigDecimal bdendrezgeb;
1707 BigDecimal testpr;
1708 SystemConfig.hmAdrRDaten.put("<Rwegkm>",Integer.toString(zm.km));
1709 SystemConfig.hmAdrRDaten.put("<Rhbanzahl>",Integer.toString(zm.gesamtZahl) );
1710 DecimalFormat dfx = new DecimalFormat( "0.00" );
1712 if(zm.hbheim){ // und zwar im Heim
1713 //System.out.println("Der HB ist im Heim");
1714 if(zm.hbvoll){// Volle Ziffer abrechnen?
1715 //System.out.println("Es kann der volle Hausbesuch abgerechnet werden");
1716 SystemConfig.hmAdrRDaten.put("<Rhbpos>",hbpos);
1717 preis = PreisUeberPosition(SystemConfig.hmAdrRDaten.get("<Rhbpos>"),
1718 zm.preisgruppe,SystemConfig.hmAdrRDaten.get("<Rnummer>").substring(0,2),neuerpreis);
1719 //,"<Rhbpos>","<Rwegpos>","<Rhbpreis>","<Rwegpreis>","<Rhbproz>","<Rwegproz>","<Rhbanzahl>"
1720 //,"<Rhbgesamt>","<Rweggesamt>","<Rwegkm>"});
1721 bdpreis = new BigDecimal(new Double(preis));
1722 //bdposwert = bdpreis.multiply(BigDecimal.valueOf(new Double(zm.gesamtZahl)));
1723 bdposwert = bdpreis.multiply(BigDecimal.valueOf(new Double(realhbAnz)));
1724 retobj[0] = ((BigDecimal)retobj[0]).add(BigDecimal.valueOf(bdposwert.doubleValue()));
1727 /*******************************/
1728 if(zz.equals("1")){// Zuzahlungspflichtig
1729 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", preis);
1730 bdrezgeb = bdpreis.divide(BigDecimal.valueOf(new Double(10.000)));
1731 testpr = bdrezgeb.setScale(2, BigDecimal.ROUND_HALF_UP);
1732 bdendrezgeb = testpr.multiply(BigDecimal.valueOf(new Double(zm.gesamtZahl)));
1733 SystemConfig.hmAdrRDaten.put("<Rhbproz>", dfx.format(testpr.doubleValue()));
1734 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", dfx.format(bdendrezgeb.doubleValue()));
1735 retobj[1] = ((Double)retobj[1]) +bdendrezgeb.doubleValue();
1736 }else{
1737 SystemConfig.hmAdrRDaten.put("<Rhbanzahl>","----");
1738 SystemConfig.hmAdrRDaten.put("<Rhbpos>","----");
1739 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", "0,00");
1740 SystemConfig.hmAdrRDaten.put("<Rhbproz>", "0,00");
1741 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", "0,00");
1742 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----");
1743 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
1744 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
1745 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
1746 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
1748 /*******************************/
1749 if(!kmgeld.equals("")){// Wenn Kilometer abgerechnet werden können
1750 //System.out.println("Es könnten Kilometer abgerechnet werden");
1751 if( kmBesserAlsPauschale(kmpausch,
1752 kmgeld,
1753 Double.parseDouble(Integer.toString(zm.km)),
1754 zm.preisgruppe,
1755 RezTools.putRezNrGetDisziplin(SystemConfig.hmAdrRDaten.get("<Rnummer>"))
1756 ) ){
1757 //Mit Kilometerabrechnung verdient man mehr
1758 preis = PreisUeberPosition(kmgeld,
1759 zm.preisgruppe,SystemConfig.hmAdrRDaten.get("<Rnummer>").substring(0,2),neuerpreis);
1760 SystemConfig.hmAdrRDaten.put("<Rwegpos>",""+zm.km+"km*"+preis);
1761 /*******************************/
1762 bdpreis = new BigDecimal(new Double(preis)).multiply(new BigDecimal(new Double(zm.km)));
1763 bdposwert = bdpreis.multiply(BigDecimal.valueOf(new Double(realhbAnz)));
1764 retobj[0] = ((BigDecimal)retobj[0]).add(BigDecimal.valueOf(bdposwert.doubleValue()));
1765 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", dfx.format(bdpreis.doubleValue()));
1766 //System.out.println("Zuzahlungsmodus = "+SystemPreislisten.hmZuzahlModus.get(putRezNrGetDisziplin(rezid)).get(zm.preisgruppe-1));
1767 if(zz.equals("1")){// Zuzahlungspflichtig
1769 * Hier noch den bayrischen Modus einbauen.
1773 if(SystemPreislisten.hmZuzahlModus.get(putRezNrGetDisziplin(rezid)).get(zm.preisgruppe-1) == 1){
1774 bdrezgeb = bdpreis.divide(BigDecimal.valueOf(new Double(10.000)));
1775 testpr = bdrezgeb.setScale(2, BigDecimal.ROUND_HALF_UP);
1776 bdendrezgeb = testpr.multiply(BigDecimal.valueOf(new Double(zm.gesamtZahl)));
1777 SystemConfig.hmAdrRDaten.put("<Rwegproz>", dfx.format(testpr.doubleValue()));
1778 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", dfx.format(bdendrezgeb.doubleValue()));
1779 SystemConfig.hmAdrRDaten.put("<Rweganzahl>",Integer.valueOf(zm.gesamtZahl).toString() );
1780 retobj[1] = ((Double)retobj[1]) +bdendrezgeb.doubleValue();
1781 }else{ //bayrische Variante
1782 //bdpreis.divide(BigDecimal.valueOf(new Double(10.000)))
1783 bdrezgeb = BigDecimal.valueOf( new Double(preis) ).divide(BigDecimal.valueOf(new Double(10.000)));
1784 testpr = bdrezgeb.setScale(2, BigDecimal.ROUND_HALF_UP);
1785 bdendrezgeb = testpr.multiply(BigDecimal.valueOf(new Double(zm.gesamtZahl))).multiply(new BigDecimal(new Double(zm.km)));
1786 SystemConfig.hmAdrRDaten.put("<Rwegproz>", dfx.format(testpr.doubleValue())+"(*"+Integer.toString(zm.km)+"km)");
1787 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", dfx.format(bdendrezgeb.doubleValue()));
1788 SystemConfig.hmAdrRDaten.put("<Rweganzahl>",Integer.valueOf(zm.gesamtZahl).toString() );
1789 retobj[1] = ((Double)retobj[1]) +bdendrezgeb.doubleValue();
1791 }else{
1792 SystemConfig.hmAdrRDaten.put("<Rhbanzahl>","----");
1793 SystemConfig.hmAdrRDaten.put("<Rhbpos>","----");
1794 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", "0,00");
1795 SystemConfig.hmAdrRDaten.put("<Rhbproz>", "0,00");
1796 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", "0,00");
1797 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----");
1798 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
1799 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
1800 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
1801 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
1803 /*******************************/
1805 //hier zuerst die kilometer ermitteln mal Kilometerpreis = der Endpreis
1806 }else{// Keine Kilometer angegeben also pauschale verwenden
1807 //System.out.println("Es wurden keine Kilometer angegeben also wird nach Ortspauschale abgerechnet");
1808 if(!kmpausch.equals("")){//Wenn die Kasse keine Pauschale zur Verfügung stellt
1809 SystemConfig.hmAdrRDaten.put("<Rwegpos>",kmpausch);
1810 preis = PreisUeberPosition(SystemConfig.hmAdrRDaten.get("<Rwegpos>"),
1811 zm.preisgruppe,SystemConfig.hmAdrRDaten.get("<Rnummer>").substring(0,2),neuerpreis);
1812 /*******************************/
1813 bdpreis = new BigDecimal(new Double(preis));
1814 bdposwert = bdpreis.multiply(BigDecimal.valueOf(new Double(realhbAnz)));
1815 retobj[0] = ((BigDecimal)retobj[0]).add(BigDecimal.valueOf(bdposwert.doubleValue()));
1816 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", dfx.format(bdpreis.doubleValue()));
1817 if(zz.equals("1")){// Zuzahlungspflichtig
1818 bdrezgeb = bdpreis.divide(BigDecimal.valueOf(new Double(10.000)));
1819 testpr = bdrezgeb.setScale(2, BigDecimal.ROUND_HALF_UP);
1820 bdendrezgeb = testpr.multiply(BigDecimal.valueOf(new Double(zm.gesamtZahl)));
1821 SystemConfig.hmAdrRDaten.put("<Rwegproz>", dfx.format(testpr.doubleValue()));
1822 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", dfx.format(bdendrezgeb.doubleValue()));
1823 SystemConfig.hmAdrRDaten.put("<Rweganzahl>",Integer.valueOf(zm.gesamtZahl).toString() );
1824 retobj[1] = ((Double)retobj[1]) +bdendrezgeb.doubleValue();
1825 }else{
1826 SystemConfig.hmAdrRDaten.put("<Rhbanzahl>","----");
1827 SystemConfig.hmAdrRDaten.put("<Rhbpos>","----");
1828 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", "0,00");
1829 SystemConfig.hmAdrRDaten.put("<Rhbproz>", "0,00");
1830 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", "0,00");
1831 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----");
1832 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
1833 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
1834 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
1835 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
1837 /*******************************/
1840 }else{
1841 JOptionPane.showMessageDialog(null, "Dieser Kostenträger kennt keine Weg-Pauschale, geben Sie im Patientenstamm die Anzahl Kilometer an" );
1842 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----");
1843 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
1844 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
1845 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
1846 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
1850 }else{// es können keine Kilometer abgerechnet werden
1851 //System.out.println("Zuzahlungsmodus = "+SystemPreislisten.hmZuzahlModus.get(putRezNrGetDisziplin(rezid)).get(zm.preisgruppe-1));
1852 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
1853 preis = PreisUeberPosition(SystemConfig.hmAdrRDaten.get("<Rwegpos>"),
1854 zm.preisgruppe,SystemConfig.hmAdrRDaten.get("<Rnummer>").substring(0,2),neuerpreis);
1855 if(preis != null){
1856 /*******************************/
1857 bdpreis = new BigDecimal(new Double(preis));
1858 bdposwert = bdpreis.multiply(BigDecimal.valueOf(new Double(realhbAnz)));
1859 retobj[0] = ((BigDecimal)retobj[0]).add(BigDecimal.valueOf(bdposwert.doubleValue()));
1860 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", dfx.format(bdpreis.doubleValue()));
1861 if(zz.equals("1")){// Zuzahlungspflichtig
1862 bdrezgeb = bdpreis.divide(BigDecimal.valueOf(new Double(10.000)));
1863 testpr = bdrezgeb.setScale(2, BigDecimal.ROUND_HALF_UP);
1864 bdendrezgeb = testpr.multiply(BigDecimal.valueOf(new Double(zm.gesamtZahl)));
1865 SystemConfig.hmAdrRDaten.put("<Rwegproz>", dfx.format(testpr.doubleValue()));
1866 SystemConfig.hmAdrRDaten.put("<Rweganzahl>",Integer.valueOf(zm.gesamtZahl).toString() );
1867 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", dfx.format(bdendrezgeb.doubleValue()));
1868 retobj[1] = ((Double)retobj[1]) +bdendrezgeb.doubleValue();
1869 }else{
1870 SystemConfig.hmAdrRDaten.put("<Rhbanzahl>","----");
1871 SystemConfig.hmAdrRDaten.put("<Rhbpos>","----");
1872 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", "0,00");
1873 SystemConfig.hmAdrRDaten.put("<Rhbproz>", "0,00");
1874 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", "0,00");
1875 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----");
1876 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
1877 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
1878 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
1879 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
1882 }else{
1883 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----");
1884 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
1885 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
1886 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
1887 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
1892 }else{//nur Mit-Hausbesuch
1893 SystemConfig.hmAdrRDaten.put("<Rhbpos>",hbmit);
1894 preis = PreisUeberPosition(SystemConfig.hmAdrRDaten.get("<Rhbpos>"),
1895 zm.preisgruppe,SystemConfig.hmAdrRDaten.get("<Rnummer>").substring(0,2),neuerpreis);
1896 /*******************************/
1897 if(preis != null){
1898 bdpreis = new BigDecimal(new Double(preis));
1899 bdposwert = bdpreis.multiply(BigDecimal.valueOf(new Double(realhbAnz)));
1900 retobj[0] = ((BigDecimal)retobj[0]).add(BigDecimal.valueOf(bdposwert.doubleValue()));
1901 if(zz.equals("1")){// Zuzahlungspflichtig
1902 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", preis);
1903 bdrezgeb = bdpreis.divide(BigDecimal.valueOf(new Double(10.000)));
1904 testpr = bdrezgeb.setScale(2, BigDecimal.ROUND_HALF_UP);
1905 bdendrezgeb = testpr.multiply(BigDecimal.valueOf(new Double(zm.gesamtZahl)));
1906 SystemConfig.hmAdrRDaten.put("<Rhbproz>", dfx.format(testpr.doubleValue()));
1907 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", dfx.format(bdendrezgeb.doubleValue()));
1908 //SystemConfig.hmAdrRDaten.put("<Rweganzahl>",Integer.valueOf(zm.gesamtZahl).toString() );
1909 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----" );
1910 SystemConfig.hmAdrRDaten.put("<Rwpreis>","0,00" );
1911 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----" );
1912 retobj[1] = ((Double)retobj[1]) +bdendrezgeb.doubleValue();
1913 }else{
1914 SystemConfig.hmAdrRDaten.put("<Rhbanzahl>","----");
1915 SystemConfig.hmAdrRDaten.put("<Rhbpos>","----");
1916 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", "0,00");
1917 SystemConfig.hmAdrRDaten.put("<Rhbproz>", "0,00");
1918 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", "0,00");
1919 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----");
1920 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
1921 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
1922 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
1923 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
1925 }else{
1926 SystemConfig.hmAdrRDaten.put("<Rhbanzahl>","----");
1927 SystemConfig.hmAdrRDaten.put("<Rhbpos>","----");
1928 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", "0,00");
1929 SystemConfig.hmAdrRDaten.put("<Rhbproz>", "0,00");
1930 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", "0,00");
1931 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----");
1932 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
1933 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
1934 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
1935 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
1937 /*******************************/
1939 }else{//nicht im Heim
1940 //System.out.println("Der Hausbesuch ist nicht in einem Heim");
1941 SystemConfig.hmAdrRDaten.put("<Rhbpos>",hbpos);
1942 preis = PreisUeberPosition(SystemConfig.hmAdrRDaten.get("<Rhbpos>"),
1943 zm.preisgruppe,SystemConfig.hmAdrRDaten.get("<Rnummer>").substring(0,2),neuerpreis);
1944 /*******************************/
1945 bdpreis = new BigDecimal(new Double(preis));
1946 bdposwert = bdpreis.multiply(BigDecimal.valueOf(new Double(realhbAnz)));
1947 retobj[0] = ((BigDecimal)retobj[0]).add(BigDecimal.valueOf(bdposwert.doubleValue()));
1948 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", preis);
1950 bdrezgeb = bdpreis.divide(BigDecimal.valueOf(new Double(10.000)));
1951 testpr = bdrezgeb.setScale(2, BigDecimal.ROUND_HALF_UP);
1952 bdendrezgeb = testpr.multiply(BigDecimal.valueOf(new Double(zm.gesamtZahl)));
1953 SystemConfig.hmAdrRDaten.put("<Rhbproz>", dfx.format(testpr.doubleValue()));
1954 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", dfx.format(bdendrezgeb.doubleValue()));
1955 retobj[1] = ((Double)retobj[1]) +bdendrezgeb.doubleValue();
1956 /*******************************/
1959 if(!kmgeld.equals("")){// Wenn Kilometer abgerechnet werden k�nnen
1960 //System.out.println("Es könnten Kilometer abgerechnet werden");
1961 if( kmBesserAlsPauschale(kmpausch,kmgeld,Double.parseDouble(Integer.toString(zm.km)),zm.preisgruppe,RezTools.putRezNrGetDisziplin(SystemConfig.hmAdrRDaten.get("<Rnummer>"))) ){
1962 //Kilometerabrechnung besser als Pauschale
1963 preis = PreisUeberPosition(kmgeld,
1964 zm.preisgruppe,SystemConfig.hmAdrRDaten.get("<Rnummer>").substring(0,2),neuerpreis);
1965 SystemConfig.hmAdrRDaten.put("<Rwegpos>",""+zm.km+"km*"+preis );
1966 /*******************************/
1968 bdpreis = new BigDecimal(new Double(preis)).multiply(new BigDecimal(new Double(zm.km)));
1969 bdposwert = bdpreis.multiply(BigDecimal.valueOf(new Double(realhbAnz)));
1970 retobj[0] = ((BigDecimal)retobj[0]).add(BigDecimal.valueOf(bdposwert.doubleValue()));
1971 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", dfx.format(bdpreis.doubleValue()));
1972 if(SystemPreislisten.hmZuzahlModus.get(putRezNrGetDisziplin(rezid)).get(zm.preisgruppe-1) == 1){
1973 bdrezgeb = bdpreis.divide(BigDecimal.valueOf(new Double(10.000)));
1974 testpr = bdrezgeb.setScale(2, BigDecimal.ROUND_HALF_UP);
1975 bdendrezgeb = testpr.multiply(BigDecimal.valueOf(new Double(zm.gesamtZahl)));
1976 SystemConfig.hmAdrRDaten.put("<Rwegproz>", dfx.format(testpr.doubleValue()));
1977 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", dfx.format(bdendrezgeb.doubleValue()));
1978 SystemConfig.hmAdrRDaten.put("<Rweganzahl>",Integer.valueOf(zm.gesamtZahl).toString() );
1979 retobj[1] = ((Double)retobj[1]) +bdendrezgeb.doubleValue();
1980 }else{
1981 //bdpreis.divide(BigDecimal.valueOf(new Double(10.000)))
1982 bdrezgeb = BigDecimal.valueOf( new Double(preis) ).divide(BigDecimal.valueOf(new Double(10.000)));
1983 testpr = bdrezgeb.setScale(2, BigDecimal.ROUND_HALF_UP);
1984 bdendrezgeb = testpr.multiply(BigDecimal.valueOf(new Double(zm.gesamtZahl))).multiply(new BigDecimal(new Double(zm.km)));
1985 SystemConfig.hmAdrRDaten.put("<Rwegproz>", dfx.format(testpr.doubleValue())+"(*"+Integer.toString(zm.km)+"km)");
1986 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", dfx.format(bdendrezgeb.doubleValue()));
1987 SystemConfig.hmAdrRDaten.put("<Rweganzahl>",Integer.valueOf(zm.gesamtZahl).toString() );
1988 retobj[1] = ((Double)retobj[1]) +bdendrezgeb.doubleValue();
1990 /*******************************/
1994 }else{
1995 //System.out.println("Es wurden keine Kilometer angegeben also wird nach Ortspauschale abgerechnet");
1996 if(!kmpausch.equals("")){//Wenn die Kasse keine Pauschale zur Verfügung stellt
1997 SystemConfig.hmAdrRDaten.put("<Rwegpos>",kmpausch);
1998 preis = PreisUeberPosition(SystemConfig.hmAdrRDaten.get("<Rwegpos>"),
1999 zm.preisgruppe,SystemConfig.hmAdrRDaten.get("<Rnummer>").substring(0,2),neuerpreis);
2000 /*******************************/
2001 bdpreis = new BigDecimal(new Double(preis));
2002 bdposwert = bdpreis.multiply(BigDecimal.valueOf(new Double(realhbAnz)));
2003 retobj[0] = ((BigDecimal)retobj[0]).add(BigDecimal.valueOf(bdposwert.doubleValue()));
2004 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", dfx.format(bdpreis.doubleValue()));
2006 bdrezgeb = bdpreis.divide(BigDecimal.valueOf(new Double(10.000)));
2007 testpr = bdrezgeb.setScale(2, BigDecimal.ROUND_HALF_UP);
2008 bdendrezgeb = testpr.multiply(BigDecimal.valueOf(new Double(zm.gesamtZahl)));
2009 SystemConfig.hmAdrRDaten.put("<Rwegproz>", dfx.format(testpr.doubleValue()));
2010 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", dfx.format(bdendrezgeb.doubleValue()));
2011 SystemConfig.hmAdrRDaten.put("<Rweganzahl>",Integer.valueOf(zm.gesamtZahl).toString() );
2012 retobj[1] = ((Double)retobj[1]) +bdendrezgeb.doubleValue();
2013 /*******************************/
2014 }else{
2015 JOptionPane.showMessageDialog(null, "Dieser Kostenträger kennt keine Weg-Pauschale, geben Sie im Patientenstamm die Anzahl Kilometer an" );
2016 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
2017 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----");
2018 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
2019 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
2020 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
2024 }else{// es können keine Kilometer abgerechnet werden
2025 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
2026 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----");
2027 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
2028 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
2029 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
2034 }else{
2035 SystemConfig.hmAdrRDaten.put("<Rhbanzahl>","----");
2036 SystemConfig.hmAdrRDaten.put("<Rhbpos>","----");
2037 SystemConfig.hmAdrRDaten.put("<Rhbpreis>", "0,00");
2038 SystemConfig.hmAdrRDaten.put("<Rhbproz>", "0,00");
2039 SystemConfig.hmAdrRDaten.put("<Rhbgesamt>", "0,00");
2040 SystemConfig.hmAdrRDaten.put("<Rweganzahl>","----");
2041 SystemConfig.hmAdrRDaten.put("<Rwegpos>","----");
2042 SystemConfig.hmAdrRDaten.put("<Rwegpreis>", "0,00");
2043 SystemConfig.hmAdrRDaten.put("<Rwegproz>", "0,00");
2044 SystemConfig.hmAdrRDaten.put("<Rweggesamt>", "0,00");
2046 //System.out.println("Der Rezeptwert = "+retobj[0]);
2047 return retobj;
2048 /*****************************************************/
2051 public static void constructVirginHMap(){
2052 try{
2053 SystemConfig.hmAdrRDaten.put("<Rid>",(String)Reha.thisClass.patpanel.vecaktrez.get(35) );
2054 SystemConfig.hmAdrRDaten.put("<Rnummer>",(String)Reha.thisClass.patpanel.vecaktrez.get(1) );
2055 SystemConfig.hmAdrRDaten.put("<Rdatum>",DatFunk.sDatInDeutsch((String)Reha.thisClass.patpanel.vecaktrez.get(2)) );
2056 }catch(Exception ex){
2057 ex.printStackTrace();
2061 public static void constructFormularHMap(){
2062 try{
2063 DecimalFormat dfx = new DecimalFormat( "0.00" );
2064 SystemConfig.hmAdrRDaten.put("<Rid>",(String)Reha.thisClass.patpanel.vecaktrez.get(35) );
2065 SystemConfig.hmAdrRDaten.put("<Rnummer>",(String)Reha.thisClass.patpanel.vecaktrez.get(1) );
2066 SystemConfig.hmAdrRDaten.put("<Rdatum>",DatFunk.sDatInDeutsch((String)Reha.thisClass.patpanel.vecaktrez.get(2)) );
2067 for(int i = 3; i < 7;i++){
2068 if( ! Reha.thisClass.patpanel.vecaktrez.get(i).equals("0") ){
2069 SystemConfig.hmAdrRDaten.put("<Rposition"+(i-2)+">",(String)Reha.thisClass.patpanel.vecaktrez.get(45+i) );
2070 Double preis = Double.parseDouble((String)Reha.thisClass.patpanel.vecaktrez.get(15+i));
2072 SystemConfig.hmAdrRDaten.put("<Rpreis"+(i-2)+">", dfx.format(preis).replace(".",",") );
2073 SystemConfig.hmAdrRDaten.put("<Ranzahl"+(i-2)+">", (String)Reha.thisClass.patpanel.vecaktrez.get(i) );
2074 BigDecimal gesamt = BigDecimal.valueOf(preis).multiply(BigDecimal.valueOf(Double.parseDouble((String)Reha.thisClass.patpanel.vecaktrez.get(i) ))) ;
2075 SystemConfig.hmAdrRDaten.put("<Rgesamt"+(i-2)+">", dfx.format(gesamt).replace(".",",") );
2078 }catch(Exception ex){
2079 ex.printStackTrace();
2083 /***************************************************/
2084 /***************************************************/
2085 /******Funktionen für Abrechnung nach §302**********/
2086 /***************************************************/
2087 public static Object[] unter18Check(Vector<Vector<Object>> behandlungsfall,String geburtstag){
2088 // unter 18 ab Vector x über 18 gesplittet
2089 Object[] ret = {Boolean.valueOf(true),behandlungsfall.size(),Boolean.valueOf(false)};
2090 String tag1 = (String)behandlungsfall.get(behandlungsfall.size()-1).get(0);
2091 String tag2 = (String)behandlungsfall.get(0).get(0);
2092 if(DatFunk.Unter18(tag1, geburtstag)){
2093 return ret;
2095 if( (!DatFunk.Unter18(tag1, geburtstag)) && (!DatFunk.Unter18(tag2, geburtstag))){
2096 ret[0] = false;
2097 ret[1] = -1;
2098 ret[2] = false;
2099 return ret;
2102 int i;
2103 for(i = 0; i < behandlungsfall.size();i++){
2104 tag1 = (String)behandlungsfall.get(i).get(0);
2105 if(! DatFunk.Unter18(tag1, geburtstag)){
2106 break;
2109 ret[0] = true;
2110 ret[1] = i;
2111 ret[2] = true;
2112 return ret;
2114 /***************************************************/
2115 /***************************************************/
2116 public static Object[] jahresWechselCheck(Vector<Vector<Object>> behandlungsfall,boolean unter18){
2117 // Jahreswechsel ab Position vollständig im alten Jahr
2118 //unter18 wird hier nicht mehr ausgewertet, als Parameter aber noch belassen
2119 Object[] ret = {Boolean.valueOf(false), -1 ,Boolean.valueOf(false)};
2120 if( ((String)behandlungsfall.get(0).get(0)).endsWith(SystemConfig.aktJahr)){
2121 return ret;
2123 for(int i = 0;i < behandlungsfall.size();i++){
2124 if(! ((String)behandlungsfall.get(i).get(0)).endsWith(SystemConfig.aktJahr)){
2125 ret[0] = true;
2126 ret[2] = true;
2127 }else{
2128 ret[0] = true;
2129 ret[1] = i;
2130 ret[2] = false;
2131 break;
2134 return ret;
2136 /***************************************************/
2137 public static void loescheRezAusVolleTabelle(final String reznr){
2138 new SwingWorker<Void,Void>(){
2139 @Override
2140 protected Void doInBackground() throws Exception {
2141 SqlInfo.sqlAusfuehren("delete from volle where rez_nr='"+reznr+"'");
2142 return null;
2145 }.execute();
2148 /***************************************************/
2150 public static void fuelleVolleTabelle(final String reznr,final String rezbehandler){
2151 new SwingWorker<Void,Void>(){
2152 @Override
2153 protected Void doInBackground() throws Exception {
2154 try{
2155 if(SqlInfo.gibtsSchon("select rez_nr from volle where rez_nr ='"+reznr+"' LIMIT 1")){
2156 return null;
2158 Vector<Vector<String>> vec = SqlInfo.holeFelder("select pat_intern,rez_datum,id from verordn where rez_nr = '"+reznr+"' LIMIT 1" );
2159 String cmd = "insert into volle set rez_nr='"+reznr+"', "+
2160 "pat_intern='"+vec.get(0).get(0)+"', behandler='"+rezbehandler+"', "+
2161 "fertigam='"+DatFunk.sDatInSQL(DatFunk.sHeute())+"', "+
2162 "rez_datum='"+vec.get(0).get(1)+"', rezid='"+vec.get(0).get(2)+"'";
2163 SqlInfo.sqlAusfuehren(cmd);
2164 }catch(Exception ex){
2165 JOptionPane.showMessageDialog(null,"Fehler bei der Ausführung 'fuelleVolleTabelle'");
2167 return null;
2169 }.execute();
2172 /***********************************************************************************/
2174 public static Object[] BehandlungenAnalysieren(String swreznum,
2175 boolean doppeltOk,boolean xforceDlg,boolean alletermine,
2176 Vector<String> vecx,Point pt,String xkollege,String datum){
2177 int i,j,count =0;
2178 boolean doppelBeh = false;
2179 int doppelBehA = 0, doppelBehB = 0;
2180 boolean dlgZeigen = false; // unterdrückt die Anzeige des TeminBestätigenAuswahlFensters
2181 boolean jetztVoll = false;
2182 boolean anzahlRezeptGleich = true;
2183 boolean nochOffenGleich = true;
2184 Vector<BestaetigungsDaten> hMPos= new Vector<BestaetigungsDaten>();
2185 hMPos.add(new BestaetigungsDaten(false, "./.", 0, 0,false,false));
2186 hMPos.add(new BestaetigungsDaten(false, "./.", 0, 0,false,false));
2187 hMPos.add(new BestaetigungsDaten(false, "./.", 0, 0,false,false));
2188 hMPos.add(new BestaetigungsDaten(false, "./.", 0, 0,false,false));
2189 Vector<String> vec = null;
2190 String copyright = "\u00AE" ;
2191 StringBuffer termbuf = new StringBuffer();
2192 int preisgruppe = -1;
2193 int iposindex = -1;
2194 boolean erstedoppel = true;
2195 boolean debug = false;
2196 String disziplin = "";
2197 boolean hmrtest = false;
2199 Object[] retObj = {null,null,null};
2201 try{
2202 // die anzahlen 1-4 werden jetzt zusammenhängend ab index 11 abgerufen
2203 if(vecx==null){
2204 vec = SqlInfo.holeSatz("verordn", "termine,pos1,pos2,pos3,pos4,hausbes,unter18,jahrfrei,pat_intern,preisgruppe,zzregel,anzahl1,anzahl2,anzahl3,anzahl4,preisgruppe", "rez_nr='"+swreznum+"'", Arrays.asList(new String[] {}));
2205 }else{
2206 vec = vecx;
2208 preisgruppe = Integer.parseInt(vec.get(9));
2209 disziplin = RezTools.putRezNrGetDisziplin(swreznum);
2210 hmrtest = (SystemPreislisten.hmHMRAbrechnung.get(disziplin).get(preisgruppe-1) == 1);
2211 if (vec.size() > 0){
2212 termbuf = new StringBuffer();
2213 if(alletermine){
2214 termbuf.append((String) vec.get(0));
2217 Vector<ArrayList<?>> termine = RezTools.holePosUndAnzahlAusTerminen(swreznum);
2218 //System.out.println(termine);
2219 if(termine.size()==0){return null;}
2220 //Arrays innerhalb dem Vector termine
2221 //termine.get(0) = Positionen (String)
2222 //termine.get(1) = Anzahlen (Integer)
2223 //termine.get(2) = Vorrangiges Heilmittel (Boolean)
2224 //termine.get(3) = als Standalone ergänzendes Heilmittel erlaubt (Boolean)
2225 //termine.get(4) = Object[] {doppelbehandlung(Boolean),erstepos(Integer),letztepos(Integer)}
2227 for (i=0;i<=3;i++){
2228 if(vec.get(1+i).toString().trim().equals("") ){
2229 hMPos.get(i).hMPosNr = "./.";
2230 hMPos.get(i).vOMenge = 0;
2231 hMPos.get(i).anzBBT = 0;
2232 }else{
2233 hMPos.get(i).hMPosNr = String.valueOf(vec.get(1+i));
2234 hMPos.get(i).vOMenge = Integer.parseInt( (String) vec.get(i+11) );
2235 hMPos.get(i).vorrangig = (Boolean)((ArrayList<?>)((Vector<?>)termine).get(2)).get(i);
2236 hMPos.get(i).invOBelegt = true;
2237 hMPos.get(i).anzBBT = Integer.valueOf( (Integer)((ArrayList<?>)((Vector<?>)termine).get(1)).get(i));
2239 hMPos.get(i).gehtNochEiner();
2241 //Jetzt alle Objekte die unbelegt sind löschen
2242 for(i=3;i>=0;i--){
2243 if(!hMPos.get(i).invOBelegt){hMPos.remove(i);}
2245 hMPos.trimToSize();
2246 //Die Variable j erhält jetzt den Wert der Anzahl der verbliebenen Objekte
2247 j= hMPos.size();
2249 //Nur wenn nach HMR-geprüft werden muß
2250 if(hmrtest){
2251 //1. erst Prüfen ob das Rezept bereits voll ist
2252 for(i=0;i<j;i++){
2253 if(!hMPos.get(i).einerOk && hMPos.get(i).vorrangig){
2254 //ein vorrangiges Heilmittel ist voll
2255 //testen ob es sich um eine Doppelposition dreht
2256 if(debug){
2257 Object[] testobj = (Object[])((ArrayList<?>)((Vector<?>)termine).get(4)).get(i);
2258 //System.out.println(testobj[0]+"-"+testobj[1]+"-"+testobj[2]);
2260 if(((Object[])((ArrayList<?>)((Vector<?>)termine).get(4)).get(i))[0]==Boolean.valueOf(true)){
2261 //testen ob es die 1-te Pos der Doppelbehandlung ist
2262 if(((Integer)((Object[])((ArrayList<?>)((Vector<?>)termine).get(4)).get(i))[1]) <
2263 ((Integer)((Object[])((ArrayList<?>)((Vector<?>)termine).get(4)).get(i))[2]) ){
2264 //Es ist die 1-te Position die voll ist also Ende-Gelände
2265 retObj[0] = String.valueOf(termbuf.toString());
2266 retObj[1] = Integer.valueOf(RezTools.REZEPT_IST_BEREITS_VOLL);
2267 //if(debug){System.out.println("erste Position = voll + Doppelbehandlung");}
2268 //if(debug){System.out.println(hMPos.get(i).hMPosNr+"-"+hMPos.get(i).vOMenge+"-"+hMPos.get(i).anzBBT);}
2269 return retObj;
2271 }else{
2272 //nein keine Doppelposition also Ende-Gelände
2273 retObj[0] = String.valueOf(termbuf.toString());
2274 retObj[1] = Integer.valueOf(RezTools.REZEPT_IST_BEREITS_VOLL);
2275 //if(debug){System.out.println("erste Position = voll und keine Doppelbehandlung");}
2276 //if(debug){System.out.println(hMPos.get(i).hMPosNr+"-"+hMPos.get(i).vOMenge+"-"+hMPos.get(i).anzBBT);}
2277 return retObj;
2279 }else if(!hMPos.get(i).einerOk && (!hMPos.get(i).vorrangig) && j==1){
2280 //Falls eines der wenigen ergänzenden Heilmittel solo verordnet wurde
2281 //z.B. Ultraschall oder Elektrotherapie
2282 retObj[0] = String.valueOf(termbuf.toString());
2283 retObj[1] = Integer.valueOf(RezTools.REZEPT_IST_BEREITS_VOLL);
2284 //if(debug){System.out.println("es geht kein zusätzlicher");}
2285 //if(debug){System.out.println(hMPos.get(i).hMPosNr+"-"+hMPos.get(i).vOMenge+"-"+hMPos.get(i).anzBBT);}
2286 return retObj;
2287 }else if( (!hMPos.get(i).vorrangig) && (j==1) &&
2288 (Boolean)((ArrayList<?>)((Vector<?>)termine).get(2)).get(i)){
2289 //Ein ergänzendes Heilmittel wurde separat verordent das nicht zulässig ist
2290 //könnte man auswerten, dann verbaut man sich aber die Möglichkeit
2291 //bei PrivatPat. abzurechnen was geht....
2292 //if(debug){System.out.println("unerlaubtes Ergänzendes Heilmittel solo verordnet");}
2293 //if(debug){System.out.println(hMPos.get(i).hMPosNr+"-"+hMPos.get(i).vOMenge+"-"+hMPos.get(i).anzBBT);}
2295 //if(debug){System.out.println("Position kann bestätigt werden");}
2296 //if(debug){System.out.println(hMPos.get(i).hMPosNr+"-"+hMPos.get(i).vOMenge+"-"+hMPos.get(i).anzBBT);}
2298 //Ende nur wenn Tarifgruppe HMR-Gruppe ist
2301 //2. dann prüfen welche Behandlungsformen noch einen vertragen können
2302 count = 0;
2303 int ianzahl = hMPos.get(0).vOMenge;
2304 int ioffen = hMPos.get(0).vORestMenge;
2305 for(i=0;i<j;i++){
2306 hMPos.get(i).danachVoll();
2307 //wenn eine Behandlung noch frei ist //(ausgeschaltet)und die Position keine Doppelposition ist
2308 if(hMPos.get(i).einerOk /*&& ((Object[])((ArrayList<?>)((Vector<?>)termine).get(4)).get(i))[0]==Boolean.valueOf(false)*/){
2309 count++;
2311 if(ianzahl != hMPos.get(i).vOMenge){anzahlRezeptGleich=false;}
2312 if(ioffen != hMPos.get(i).vORestMenge){nochOffenGleich=false;}
2314 //Keine Postition mehr frei
2315 if(count==0){
2316 retObj[0] = String.valueOf(termbuf.toString());
2317 retObj[1] = Integer.valueOf(RezTools.REZEPT_IST_BEREITS_VOLL);
2318 //if(debug){System.out.println("Rezept war bereits voll");}
2319 return retObj;
2321 //Nur Wenn mehrere Behandlungen im Rezept vermerkt
2322 if(j > 1){
2323 //Wenn mehrere noch offen sind aber ungleiche noch Offen
2324 if( (count > 1) && (!(/*anzahlRezeptGleich &&*/ nochOffenGleich)) ){
2325 dlgZeigen = true;
2328 //3. Dann Dialog zeigen
2329 // TerminBestätigenAuswahlFenster anzeigen oder überspringen
2330 // Evtl. noch Einbauen ob bei unterschiedlichen Anzahlen (System-Initialisierung) immer geöffnet wird.
2331 if (xforceDlg || (dlgZeigen && (Boolean)SystemConfig.hmTerminBestaetigen.get("dlgzeigen") ) ){
2333 TerminBestaetigenAuswahlFenster termBestAusw = new TerminBestaetigenAuswahlFenster(Reha.thisFrame,null,(Vector<BestaetigungsDaten>)hMPos,swreznum,Integer.parseInt((String)vec.get(15)));
2334 termBestAusw.pack();
2335 if(pt==null){
2336 termBestAusw.setLocationRelativeTo(null);
2337 }else{
2338 termBestAusw.setLocation(pt);
2341 termBestAusw.setzeFocus();
2342 termBestAusw.setModal(true);
2343 termBestAusw.setVisible(true);
2344 if(RezTools.DIALOG_WERT==RezTools.DIALOG_ABBRUCH){
2345 retObj[0] = String.valueOf(termbuf.toString());
2346 retObj[1] = Integer.valueOf(RezTools.REZEPT_ABBRUCH);
2347 return retObj;
2349 for (i=0; i<j; i++){
2350 if(hMPos.get(i).best){
2351 hMPos.get(i).anzBBT += 1;
2352 //gleichzeitig prüfen ob voll
2353 if(hMPos.get(i).jetztVoll() && hMPos.get(i).vorrangig){
2354 jetztVoll = true;
2355 }else if(hMPos.get(i).jetztVoll() && (!hMPos.get(i).vorrangig) && j==1){
2356 jetztVoll = true;
2361 }else{
2363 * Der Nutzer wünscht kein Auswahlfenster:
2364 * bestätige alle noch offenen Heilmittel
2367 for (i=0; i<j; i++){
2368 hMPos.get(i).best = Boolean.valueOf(hMPos.get(i).einerOk);
2369 if(hMPos.get(i).einerOk){
2370 hMPos.get(i).anzBBT += 1;
2371 hMPos.get(i).best = true;
2372 if(hMPos.get(i).jetztVoll() && hMPos.get(i).vorrangig){
2373 jetztVoll = true;
2374 }else if(hMPos.get(i).jetztVoll() && (!hMPos.get(i).vorrangig) && j==1){
2375 jetztVoll = true;
2380 String[] params = {null,null,null,null};
2381 count = 0;
2382 for(i=0;i<j;i++){
2383 if(hMPos.get(i).best){params[i]=vec.get(i+1);count++;}
2385 if(count==0){jetztVoll=true;}
2386 termbuf.append(TermineErfassen.macheNeuTermin2(
2387 (params[0] != null ? params[0] : ""),
2388 (params[1] != null ? params[1] : ""),
2389 (params[2] != null ? params[2] : ""),
2390 (params[3] != null ? params[3] : ""),
2391 xkollege,datum));
2393 retObj[0] = String.valueOf(termbuf.toString());
2394 retObj[1] = (jetztVoll ? Integer.valueOf(RezTools.REZEPT_IST_JETZ_VOLL) : Integer.valueOf(RezTools.REZEPT_HAT_LUFT ));
2396 //if(debug){System.out.println("am ende angekommen");}
2397 return retObj;
2398 }else{
2399 //System.out.println("*****************IN ELSE***************************");
2401 return retObj;
2402 }catch(Exception ex){
2403 ex.printStackTrace();
2404 }finally{
2405 //vec = null;
2406 hMPos = null;
2408 return retObj;
2410 private static int welcheIstMaxInt(int i1,int i2){
2411 if(i1 > i2){return 1;}
2412 if(i1==i2){return 0;}
2413 return 2;
2416 /************************************/
2419 /***************************************************/
2420 /***************************************************/
2423 class ZuzahlModell{
2424 public int gesamtZahl;
2425 public boolean allefrei;
2426 public boolean allezuzahl;
2427 public boolean anfangfrei;
2428 public int teil1;
2429 public int teil2;
2430 public int preisgruppe;
2431 public boolean hausbesuch;
2432 boolean hbvoll;
2433 boolean hbheim;
2434 int km;
2436 public ZuzahlModell(){