HM-Sparten können jetzt ausgeschaltet werden
[thera-pi.git] / Reha / src / systemEinstellungen / SysUtilPreislisten.java
bloba53fdc12d7978f8f889feb67249843fb9d442fa5
1 package systemEinstellungen;
3 import hauptFenster.Reha;
5 import java.awt.BorderLayout;
6 import java.awt.Color;
7 import java.awt.Cursor;
8 import java.awt.LinearGradientPaint;
9 import java.awt.event.ActionEvent;
10 import java.awt.event.ActionListener;
11 import java.awt.event.KeyEvent;
12 import java.awt.event.KeyListener;
13 import java.awt.event.MouseAdapter;
14 import java.awt.event.MouseEvent;
15 import java.awt.event.MouseListener;
16 import java.awt.geom.Point2D;
17 import java.util.Arrays;
18 import java.util.List;
19 import java.util.Vector;
21 import javax.swing.BorderFactory;
22 import javax.swing.ButtonGroup;
23 import javax.swing.DefaultCellEditor;
24 import javax.swing.JButton;
25 import javax.swing.JComponent;
26 import javax.swing.JOptionPane;
27 import javax.swing.JPanel;
28 import javax.swing.JScrollPane;
29 import javax.swing.KeyStroke;
30 import javax.swing.SwingConstants;
31 import javax.swing.SwingUtilities;
32 import javax.swing.table.DefaultTableModel;
34 import jxTableTools.DblCellEditor;
35 import jxTableTools.DoubleTableCellRenderer;
36 import jxTableTools.MitteRenderer;
37 import jxTableTools.TableTool;
39 import org.jdesktop.swingworker.SwingWorker;
40 import org.jdesktop.swingx.JXPanel;
41 import org.jdesktop.swingx.JXTable;
42 import org.jdesktop.swingx.painter.CompoundPainter;
43 import org.jdesktop.swingx.painter.MattePainter;
46 import sqlTools.PLServerAuslesen;
47 import CommonTools.SqlInfo;
48 import CommonTools.JCompTools;
49 import CommonTools.JRtaCheckBox;
50 import CommonTools.JRtaComboBox;
51 import CommonTools.JRtaRadioButton;
52 import CommonTools.JRtaTextField;
53 import terminKalender.DatFunk;
54 import terminKalender.ParameterLaden;
56 import CommonTools.INIFile;
57 import CommonTools.INITool;
59 import com.jgoodies.forms.builder.PanelBuilder;
60 import com.jgoodies.forms.layout.CellConstraints;
61 import com.jgoodies.forms.layout.FormLayout;
63 public class SysUtilPreislisten extends JXPanel implements KeyListener, ActionListener {
65 /**
68 private static final long serialVersionUID = 8748205631934202364L;
69 JRtaComboBox[] jcmb = {null,null,null,null};
70 JRtaTextField gueltig = null;
71 JButton[] button = {null,null,null,null,null,null};
72 JButton plServer = null;
73 int kurztext = 1;
75 JXTable preislisten = null;
76 MyPreislistenTableModel modpreis = new MyPreislistenTableModel();
77 JRtaRadioButton[] jradio = {null,null,null};
78 ButtonGroup jradiogroup = new ButtonGroup();
81 JXTable plserver = null;
82 MyServerTableModel modserver = new MyServerTableModel();
84 JPanel pledit = null;
85 JPanel plupdate = null;
87 JButton plEinlesen = null;
89 // neue Elemente:
90 JButton posneu = null;
91 JButton posdel = null;
92 JButton speichern = null;
93 JButton abbruch = null;
94 JButton zurueck = null;
95 JButton ueber = null;
96 JRtaCheckBox bezeich = null;
97 JRtaCheckBox neuaufalt = null;
98 Vector<String> delvec = new Vector<String>();
99 String[] dbtarife = {"kgtarif","matarif","ertarif","lotarif","rhtarif","potarif"};
100 String[] zzart = new String[] {"nicht relevant","erste Behandlung >=","Rezeptdatum >=","beliebige Behandlung >=","Rezept splitten"};
101 String[] disziplin = {"Physio","Massage","Ergo","Logo","Reha","Podo"};
102 JRtaComboBox kuerzelcombo = new JRtaComboBox();
103 KeyListener kl = null;
105 public SysUtilPreislisten(){
106 super(new BorderLayout());
107 //System.out.println("Aufruf SysUtilPreislisten");
108 this.setBorder(BorderFactory.createEmptyBorder(20, 40, 20, 20));
109 /****/
110 setBackgroundPainter(Reha.thisClass.compoundPainter.get("SystemInit"));
111 /****/
112 pledit = getVorlagenSeite();
113 add(pledit,BorderLayout.CENTER);
115 new SwingWorker<Void,Void>(){
116 @Override
117 protected Void doInBackground() throws Exception {
118 try{
119 plupdate = getPlupdate();
121 }catch(Exception ex){
122 ex.printStackTrace();
124 return null;
127 }.execute();
130 /************** Beginn der Methode für die Objekterstellung und -platzierung *********/
131 private JPanel getVorlagenSeite(){
132 try{
133 // 1. 2. 3. 4. 5. 6. 7. 8. 9.
134 FormLayout lay = new FormLayout("right:max(60dlu;p), 4dlu, 70dlu, 4dlu, 70dlu, 4dlu, 10dlu, 4dlu, 70dlu",
135 //1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
136 "p, 2dlu, p, 2dlu, p,10dlu, p, 10dlu,130dlu, 5dlu, p,5dlu,p");
138 PanelBuilder builder = new PanelBuilder(lay);
139 builder.setDefaultDialogBorder();
140 builder.getPanel().setOpaque(false);
141 CellConstraints cc = new CellConstraints();
142 builder.addLabel("Heilmittelart auswählen",cc.xy(1, 1));
144 jcmb[0] = new JRtaComboBox(SystemConfig.rezeptKlassen);
145 jcmb[0].setSelectedItem(SystemConfig.initRezeptKlasse);
146 jcmb[0].setActionCommand("tabelleRegeln");
147 jcmb[0].setName("rezeptklassen");
148 jcmb[0].addActionListener(this);
149 builder.add(jcmb[0],cc.xyw(3,1,7));
151 String[] xkuerzel = {"KG","MA","ER","LO","RH","PO"};
152 Vector<String> xvec = SqlInfo.holeFeld("select kuerzel from kuerzel where disziplin='"+xkuerzel[jcmb[0].getSelectedIndex()]+"' order by kuerzel" );
153 if(xvec.size() > 0){
154 //System.out.println(xvec);
155 kuerzelcombo.setDataVector(xvec);
159 builder.addLabel("Tarifgruppe auswählen",cc.xy(1, 3));
160 //jcmb[1] = new JRtaComboBox(SystemConfig.vPreisGruppen);
161 jcmb[1] = new JRtaComboBox(SystemPreislisten.hmPreisGruppen.get(disziplin[jcmb[0].getSelectedIndex()]));
163 jcmb[1].setActionCommand("tabelleRegeln");
164 jcmb[1].setName("disziplin");
165 jcmb[1].addActionListener(this);
166 builder.add(jcmb[1],cc.xyw(3,3,7));
168 builder.addLabel("gültig ab",cc.xy(1,5));
169 gueltig = new JRtaTextField("DATUM",true);
170 //gueltig.setText(SystemConfig.vNeuePreiseAb.get(jcmb[0].getSelectedIndex()).get(jcmb[1].getSelectedIndex()));
171 gueltig.setText(SystemPreislisten.hmNeuePreiseAb.get(disziplin[jcmb[0].getSelectedIndex()]).get(jcmb[1].getSelectedIndex()));
172 builder.add(gueltig, cc.xy(3,5));
174 builder.addLabel("Anwendungsregel",cc.xyw(4,5,4,CellConstraints.RIGHT,CellConstraints.CENTER));
175 //String[] zzart = new String[] {"nicht relevant","erste Behandlung >=","Rezeptdatum >=","beliebige Behandlung >=","Rezept splitten"};
176 jcmb[2] = new JRtaComboBox(zzart);
178 //int einstellung = ((Integer) ((Vector)SystemConfig.vNeuePreiseRegel.get(jcmb[0].getSelectedIndex())).get( jcmb[1].getSelectedIndex()) );
179 int einstellung = ((Integer) SystemPreislisten.hmNeuePreiseRegel.get(disziplin[jcmb[0].getSelectedIndex()]).get(jcmb[1].getSelectedIndex()));
180 jcmb[2].setSelectedIndex(einstellung);
182 builder.add(jcmb[2],cc.xy(9,5));
184 plServer = new JButton("Update der Preise über Preislistenserver");
185 plServer.setIcon(SystemConfig.hmSysIcons.get("achtung"));
186 plServer.setActionCommand("plUpdate");
187 plServer.addActionListener(this);
188 builder.add(plServer,cc.xyw(3,7,7));
190 modpreis.setColumnIdentifiers(new String[] {"HM-Pos.","Kurzbez.","Langtext","aktuell","alt","id"});
191 preislisten = new JXTable(modpreis);
192 preislisten.addMouseListener(new MouseListener(){
193 @Override
194 public void mouseClicked(MouseEvent arg0) {
195 preislisten.requestFocus();
196 if(arg0.getClickCount()==1){
197 final MouseEvent xarg0 = arg0;
198 SwingUtilities.invokeLater(new Runnable(){
199 public void run(){
200 preislisten.setRowSelectionInterval(preislisten.getSelectedRow(), preislisten.getSelectedRow());
201 preislisten.setColumnSelectionInterval(preislisten.getSelectedColumn(), preislisten.getSelectedColumn());
202 //startCellEditing(tarife,tarife.getSelectedRow(),tarife.getSelectedColumn());
203 xarg0.consume();
206 return;
207 }else if(arg0.getClickCount()==2){
208 SwingUtilities.invokeLater(new Runnable(){
209 public void run(){
210 preislisten.setRowSelectionInterval(preislisten.getSelectedRow(), preislisten.getSelectedRow());
211 preislisten.setColumnSelectionInterval(preislisten.getSelectedColumn(), preislisten.getSelectedColumn());
212 startCellEditing(preislisten,preislisten.getSelectedRow(),preislisten.getSelectedColumn());
218 @Override
219 public void mouseEntered(MouseEvent arg0) {
220 // TODO Auto-generated method stub
224 @Override
225 public void mouseExited(MouseEvent arg0) {
226 // TODO Auto-generated method stub
230 @Override
231 public void mousePressed(MouseEvent arg0) {
232 // TODO Auto-generated method stub
236 @Override
237 public void mouseReleased(MouseEvent arg0) {
238 // TODO Auto-generated method stub
241 private void startCellEditing(JXTable table,int row,int col){
242 final int xrows = row;
243 final int xcols = col;
244 final JXTable xtable = table;
245 SwingUtilities.invokeLater(new Runnable(){
246 public void run(){
247 xtable.setRowSelectionInterval(xrows, xrows);
248 xtable.setColumnSelectionInterval(xcols, xcols);
249 xtable.scrollRowToVisible(xrows);
250 xtable.editCellAt(xrows,xcols );
255 preislisten.getColumn(0).setMaxWidth(65);
256 preislisten.getColumn(1).setMaxWidth(85);
257 preislisten.getColumn(1).setCellEditor(new DefaultCellEditor(kuerzelcombo));
258 preislisten.getColumn(3).setCellRenderer(new DoubleTableCellRenderer());
259 preislisten.getColumn(3).setCellEditor(new DblCellEditor());
260 preislisten.getColumn(3).setMaxWidth(50);
261 preislisten.getColumn(4).setCellRenderer(new DoubleTableCellRenderer());
262 preislisten.getColumn(4).setCellEditor(new DblCellEditor());
263 preislisten.getColumn(4).setMaxWidth(50);
264 preislisten.getColumn(5).setMinWidth(0);
265 preislisten.getColumn(5).setMaxWidth(50);
266 preislisten.getColumn(5).setCellRenderer(new MitteRenderer());
267 preislisten.setSortable(false);
268 preislisten.unregisterKeyboardAction(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0));
269 MyListener myEnterListener = new MyListener();
270 preislisten.registerKeyboardAction(myEnterListener, "Enter",
271 KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false),JComponent.WHEN_FOCUSED);
273 JScrollPane jscr = JCompTools.getTransparentScrollPane(preislisten);
275 jscr.validate();
276 new SwingWorker(){
277 @Override
278 protected Object doInBackground() throws Exception {
279 tabelleRegeln();
280 return null;
282 }.execute();
284 builder.add(jscr,cc.xyw(1,9,9));
286 posneu = new JButton("hinzufügen");
287 posneu.setActionCommand("hinzu");
288 posneu.addActionListener(this);
289 posdel = new JButton("entfernen");
290 posdel.setActionCommand("entfernen");
291 posdel.addActionListener(this);
292 speichern = new JButton("speichern");
293 speichern.setActionCommand("speichern");
294 speichern.addActionListener(this);
295 abbruch = new JButton("abbrechen");
296 abbruch.setActionCommand("abbruch");
297 abbruch.addActionListener(this);
299 builder.addLabel("Position in Liste aufnehmen/entfernen",cc.xyw(1, 11,3));
300 builder.add(posneu, cc.xy(5, 11));
301 builder.add(posdel,cc.xy(9, 11));
302 builder.addLabel("Anderungen speichern?",cc.xyw(1,13,3));
303 builder.add(speichern, cc.xy(5, 13));
305 builder.add(abbruch, cc.xy(9, 13));
307 return builder.getPanel();
308 }catch(Exception ex){
309 ex.printStackTrace();
310 JOptionPane.showMessageDialog(null,"Fehler bei der Erstellung des Combo-Box-Panels");
312 return null;
315 private class MyListener implements ActionListener {
316 public void actionPerformed(ActionEvent e) {
317 //Object src = e.getSource();
318 String actionCmd = e.getActionCommand();
319 if (actionCmd.equals("Enter")) {
320 int row = preislisten.getSelectedRow();
321 int col = preislisten.getSelectedColumn();
322 //System.out.println(row+" / "+col);
323 preislisten.getCellEditor(row, col).stopCellEditing();
324 if(col== preislisten.getColumnCount()-1){
325 col=0;
326 }else{
327 col++;
329 preislisten.setRowSelectionInterval(row, row);
330 preislisten.setColumnSelectionInterval(col, col);
336 private void fuelleMitWerten(){
337 int aktiv;
338 INIFile inif = INITool.openIni(Reha.proghome+"ini/"+Reha.aktIK+"/","rezept.ini");
340 for(int i = 0;i < 5;i++){
341 aktiv = inif.getIntegerProperty("RezeptKlassen", "KlasseAktiv"+Integer.valueOf(i+1).toString());
342 if(aktiv > 0){
343 //heilmittel[i].setSelected(true);
344 }else{
345 //heilmittel[i].setSelected(false);
349 jcmb[0].setSelectedItem(SystemConfig.initRezeptKlasse);
352 @Override
353 public void keyPressed(KeyEvent e) {
354 String name = ((JComponent)e.getSource()).getName();
355 if(name != null){
356 //System.out.println("Listener des Panels ----> TastaturEvent von "+name+" ausgelöst. Gedrückte Taste = "+e.getKeyChar());
361 @Override
362 public void keyReleased(KeyEvent e) {
363 // TODO Auto-generated method stub
367 @Override
368 public void keyTyped(KeyEvent e) {
369 // TODO Auto-generated method stub
372 private SysUtilPreislisten getInstance(){
373 return this;
376 @Override
377 public void actionPerformed(ActionEvent e) {
378 // TODO Auto-generated method stub
379 String cmd = e.getActionCommand();
380 if(cmd.equals("tabelleRegeln")){
381 delvec.clear();
382 tabelleRegeln();
383 if(SystemPreislisten.hmNeuePreiseRegel.get(disziplin[jcmb[0].getSelectedIndex()])==null){return;}
385 //int einstellung = ((Integer) ((Vector)SystemConfig.vNeuePreiseRegel.get(jcmb[0].getSelectedIndex())).get( jcmb[1].getSelectedIndex()) );
386 int einstellung = ((Integer) SystemPreislisten.hmNeuePreiseRegel.get(disziplin[jcmb[0].getSelectedIndex()]).get(jcmb[1].getSelectedIndex()));
387 jcmb[2].setSelectedIndex(einstellung);
388 String[] xkuerzel = {"KG","MA","ER","LO","RH","PO"};
389 kuerzelcombo.setDataVector(SqlInfo.holeFeld("select kuerzel from kuerzel where disziplin='"+xkuerzel[jcmb[0].getSelectedIndex()]+"'" ));
392 if(((JComponent)e.getSource()).getName().equals("rezeptklassen")){
393 SwingUtilities.invokeLater(new Runnable(){
394 public void run(){
395 jcmb[1].removeActionListener(getInstance());
396 int aktuell = jcmb[1].getSelectedIndex();
397 jcmb[1].setDataVector(SystemPreislisten.hmPreisGruppen.get(disziplin[jcmb[0].getSelectedIndex()]));
398 jcmb[1].setSelectedIndex(aktuell);
399 jcmb[1].addActionListener(getInstance());
406 if(cmd.equals("plUpdate")){
407 SwingUtilities.invokeLater(new Runnable(){
408 public void run(){
409 JOptionPane.showMessageDialog(null,"Die Forumsteilnehmer von Thera-Pi.org sind bemüht\n"+
410 "die Preislisten vollständig und aktuell zu halten.\n\n"+
411 "Wir übernehmen aber keinerlei Garantie dafür, daß dies zu jedem Zeitpunkt\n"+
412 "der Fall ist.\n\nBitte kontrollieren Sie nach jedem Preislistenimport die Daten auf\n"+
413 "Vollständigkeit und Richtigkeit der einzelnen Preise und Positionen.\n\n Herzlichen Dank dafür!");
414 String[] lists = {"Physio","Massage","Ergo","Logo","REHA","Podo"};
415 plEinlesen.setText("<html>Verfügbare Preislisten für <b><font color='#ff0000'>"+lists[jcmb[0].getSelectedIndex()]+"</font></b> ermitteln");
416 jcmb[3].removeAllItems();
417 jcmb[3].addItem((String) jcmb[1].getSelectedItem());
418 jcmb[3].setEnabled(false);
419 modserver.setRowCount(0);
420 plserver.validate();
421 remove(pledit);
422 plupdate.validate();
423 add(plupdate,BorderLayout.CENTER);
424 validate();
425 repaint();
430 if(cmd.equals("zurueck")){
431 doZurueck();
433 if(cmd.equals("pleinlesen")){
434 String[] lists = {"Physio","Massage","Ergo","Logo","Reha","Podo"};
435 testeAllepreise(lists[jcmb[0].getSelectedIndex()]);
437 if(cmd.equals("plwahl")){
439 if(cmd.equals("hinzu")){
440 //neue Position in lokaler Liste
441 int row = preislisten.getRowCount();
442 Vector<Object> nvec = new Vector<Object>();
443 nvec.add((String)"00000");
444 nvec.add( (String)"KurzNeu-"+Integer.toString(kurztext));
445 kurztext++;
446 nvec.add("");
447 nvec.add(new Double("0.00"));
448 nvec.add(new Double("0.00"));
449 nvec.add("-1");
450 modpreis.addRow((Vector) nvec.clone());
451 preislisten.validate();
452 final int xrow = row;
453 SwingUtilities.invokeLater(new Runnable(){
454 public void run(){
455 preislisten.scrollRowToVisible(preislisten.getRowCount());
456 preislisten.setRowSelectionInterval(xrow, xrow);
460 if(cmd.equals("entfernen")){
461 //Position in lokaler Liste l�schen
462 String msg = "Wenn Sie eine bestehende Position aus der Preisliste löschen werden evtl.\n"+
463 "Rezepte in der Historie nicht mehr korrekt dargestellt!\n\n"+
464 "Wollen Sie das ausgewählte Heilmittel wirklich aus der Preisliste löschen?\n";
465 int frage = JOptionPane.showConfirmDialog(null,msg, "Achtung - wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
466 if(frage != JOptionPane.YES_OPTION){
467 return;
469 int row = preislisten.getSelectedRow();
470 if(row < 0){
471 return;
473 String sid = (String) preislisten.getValueAt(row,5);
474 if(!sid.equals("-1")){
475 delvec.add(sid);
477 TableTool.loescheRow(preislisten, row);
479 if(cmd.equals("speichern")){
480 //Position in lokaler Liste l�schen
481 new SwingWorker<Void,Void>(){
482 @Override
483 protected Void doInBackground() throws Exception {
484 try{
485 doSpeichern();
487 if(Reha.demoversion){
488 JOptionPane.showMessageDialog(null, "Die Funktion -> Preisliste speichern <- ist in der Entwicklungsversion von Thera-Pi deaktiviert!");
489 return null;
490 }else{
494 }catch(Exception ex){
495 ex.printStackTrace();
497 return null;
499 }.execute();
502 if(cmd.equals("abbruch")){
503 //Position in lokaler Liste l�schen
504 SystemInit.abbrechen();
505 //SystemUtil.thisClass.parameterScroll.requestFocus();
507 if(cmd.equals("uebernehmen")){
508 //Positionen der Tabelle �bernehmen
509 new SwingWorker<Void,Void>(){
510 @Override
511 protected Void doInBackground() throws Exception {
512 try{
513 doUebernahme();
514 String msg = "Überprüfen Sie bitte alle Behandlungskürzel (Spalte Kurzbez.).\n"+
515 "Taucht oder tauchen bei Ihnen Kürzel wie 'Neu-99' auf, bedeutet dies\n"+
516 "dieser Position wurde noch kein gültiges Kürzel zugewiesen.\n\n"+
517 "In dem Fall müssen Sie dieser Position ein gültiges Kürzel zuweisen\n\n"+
518 "Die Behandlungskürzel sind von extrem(!!) wichtiger Bedeutung.";
519 JOptionPane.showMessageDialog(null,msg);
520 }catch(Exception ex){
521 ex.printStackTrace();
523 return null;
526 }.execute();
532 private void doSpeichern(){
533 // in die Datenbank schreiben
534 // in den Vector schreiben
535 // Gültig ab erneuern
536 // Anwendungsregel erneuern
537 //{"HM-Pos.","Kurzbez.","Langtext","aktuell","alt",""});
538 try{
539 Reha.thisClass.Rehaprogress.setIndeterminate(true);
540 int anzahl = modpreis.getRowCount();
541 String hmpos,kurz,lang,akt,alt,sid;
542 String sdb = dbtarife[jcmb[0].getSelectedIndex()];
543 String gruppe = Integer.valueOf(jcmb[1].getSelectedIndex()+1).toString();
544 int igruppe = jcmb[1].getSelectedIndex()+1;
545 String cmd;
546 setCursor(Reha.thisClass.wartenCursor);
547 Reha.thisClass.progressStarten(true);
548 for(int i = 0; i < anzahl; i++){
549 hmpos = (String)modpreis.getValueAt(i,0);
550 kurz = (String)modpreis.getValueAt(i,1);
551 lang = (String)modpreis.getValueAt(i,2);
552 akt = new Double((Double)modpreis.getValueAt(i,3)).toString().replaceAll(",", ".");
553 alt = new Double((Double)modpreis.getValueAt(i,4)).toString().replaceAll(",", ".");
554 sid = (String)modpreis.getValueAt(i,5);
555 if(sid.equals("-1")){
556 // neu
557 cmd = "insert into "+sdb+Integer.toString(igruppe)+" set leistung='"+lang+"', kuerzel='"+kurz+"', T_POS='"+
558 hmpos+"', T_AKT='"+akt+"', T_ALT='"+alt+"', T_PROZ='0.00'";
559 ////System.out.println(cmd);
560 SqlInfo.sqlAusfuehren(cmd);
562 }else{
563 // bestehend
564 cmd = "update "+sdb+Integer.toString(igruppe)+" set leistung='"+lang+"', kuerzel='"+kurz+"', T_POS='"+
565 hmpos+"', T_AKT='"+akt+"', T_ALT='"+alt+"', T_PROZ='0.00' where id='"+
566 sid+"'";
567 SqlInfo.sqlAusfuehren(cmd);
571 Reha.thisClass.progressStarten(true);
572 String xgueltig = gueltig.getText().trim();
573 int regel = jcmb[2].getSelectedIndex();
574 if(xgueltig.trim().equals(". .") || xgueltig.trim().equals("") ){
575 xgueltig = "";
578 String[] diszis = {"Physio","Massage","Ergo","Logo","Reha","Podo"};
579 String dis = diszis[jcmb[0].getSelectedIndex()];
580 int diswelche = jcmb[1].getSelectedIndex()+1;
582 //((Vector)SystemConfig.vNeuePreiseAb.get(jcmb[0].getSelectedIndex())).set(jcmb[1].getSelectedIndex(), xgueltig);
583 //((Vector)SystemConfig.vNeuePreiseRegel.get(jcmb[0].getSelectedIndex())).set(jcmb[1].getSelectedIndex(), jcmb[2].getSelectedIndex());
584 SystemPreislisten.hmNeuePreiseAb.get(diszis[jcmb[0].getSelectedIndex()]).set(jcmb[1].getSelectedIndex(),xgueltig);
585 SystemPreislisten.hmNeuePreiseRegel.get(diszis[jcmb[0].getSelectedIndex()]).set(jcmb[1].getSelectedIndex(),jcmb[2].getSelectedIndex());
586 INIFile inif = INITool.openIni(Reha.proghome+"ini/"+Reha.aktIK+"/","preisgruppen.ini");
587 inif.setStringProperty("PreisRegeln_"+diszis[jcmb[0].getSelectedIndex()], "PreisAb"+(diswelche),xgueltig , null);
588 inif.setIntegerProperty("PreisRegeln_"+diszis[jcmb[0].getSelectedIndex()], "PreisRegel"+(diswelche),regel , null);
589 INITool.saveIni(inif);
591 if(delvec.size()>0){
592 for(int i = 0;i < delvec.size();i++){
593 cmd = "delete from "+sdb+Integer.toString(igruppe)+" where id='"+delvec.get(i)+"'";
594 SqlInfo.sqlAusfuehren(cmd);
595 System.out.println("Löschen mit Kommando = "+cmd);
598 //String[] diszi = {"KG","MA","ER","LO","RH"};
599 //ParameterLaden.PreiseEinlesen(diszi[jcmb[0].getSelectedIndex()]);
600 SystemPreislisten.ladePreise(diszis[jcmb[0].getSelectedIndex()]);
601 setCursor(Reha.thisClass.normalCursor);
602 Reha.thisClass.Rehaprogress.setIndeterminate(false);
603 JOptionPane.showMessageDialog(null,"Preisliste wurde erfolgreich gespeichert");
604 }catch(Exception ex){
605 ex.printStackTrace();
606 setCursor(Reha.thisClass.normalCursor);
607 Reha.thisClass.Rehaprogress.setIndeterminate(false);
608 JOptionPane.showMessageDialog(null,"Fehler beim Abspeichern der Preisliste");
611 private void doZurueck(){
612 SwingUtilities.invokeLater(new Runnable(){
613 public void run(){
614 remove(plupdate);
615 pledit.validate();
616 add(pledit,BorderLayout.CENTER);
617 validate();
618 repaint();
622 private void doUebernahme(){
623 try{
624 if(modserver.getRowCount()<=0){
625 JOptionPane.showMessageDialog(null, "1. Schritt: Verfügbare Preislisten ermitteln\n"+
626 "2. Schritt: Gewünschte Preisliste in der Tabelle auswählen\n"+
627 "3. Schritt: Die ausgewählte Preisliste übernehmen - aber eben erst im 3. Schritt!");
628 // dummer Spruch
629 return;
631 int row = plserver.getSelectedRow();
632 if(row < 0){
633 JOptionPane.showMessageDialog(null, "1. Schritt: Verfügbare Preislisten ermitteln\n"+
634 "2. Schritt: Gewünschte Preisliste in der Tabelle auswählen\n"+
635 "3. Schritt: Die ausgewählte Preisliste übernehmen - aber eben erst im 3. Schritt!");
636 // dummer Spruch
637 return;
639 String[] lists = {"Physio","Massage","Ergo","Logo","REHA","Podo"};
640 String msg = "<html><b><font color='#ff0000' size=+2>Bitte sorgfältig lesen!!!!</font></b><br><br><br>"+
641 "Die von Ihnen ausgewählte Disziplin ist: <b><font color='#ff0000'> "+lists[jcmb[0].getSelectedIndex()]+"</font></b><br><br>"+
642 "Die von Ihnen ausgewählte Tarifgruppe ist: <b><font color='#ff0000'> "+(String)jcmb[1].getSelectedItem()+"</font></b><br><br>"+
643 "In die o.g. Tarifgruppe werden die Preise übernommen von:<br>"+
644 "Preisliste: <b><font color='#ff0000'>"+plserver.getValueAt(row, 1)+"</font></b><br>"+
645 "Gültigkeitsbereich: <b><font color='#ff0000'>"+plserver.getValueAt(row, 2)+"</font></b><br><br><br>"+
646 "Wollen Sie den Preislisten-Import mit diesen Einstellungen durchführen<br><br></html>";
647 int frage = JOptionPane.showConfirmDialog(null,msg,"Achtung absolut wichtige Benutzeranfrage",JOptionPane.YES_NO_OPTION);
648 if(frage != JOptionPane.YES_OPTION){
649 return;
651 setCursor(Reha.thisClass.wartenCursor);
652 Reha.thisClass.Rehaprogress.setIndeterminate(true);
653 if(neuaufalt.isSelected()){
654 doSetzeNeuAufAlt();
656 Vector preis = doHolePreiseNeu();
657 setzePreise(preis);
658 doZurueck();
659 Reha.thisClass.Rehaprogress.setIndeterminate(false);
660 setCursor(Reha.thisClass.normalCursor);
661 }catch(Exception ex){
662 ex.printStackTrace();
663 Reha.thisClass.Rehaprogress.setIndeterminate(false);
664 setCursor(Reha.thisClass.normalCursor);
665 JOptionPane.showMessageDialog(null, "Fehler beim Preislistenimport");
668 private void setzePreise(Vector preis){
669 Vector tab = modpreis.getDataVector();
670 //System.out.println(preis);
671 boolean mitbezeich = bezeich.isSelected();
672 String posnr;
673 int bisheranzahl;
674 boolean getroffen = false;
675 for(int i = 0; i < preis.size();i++){
676 bisheranzahl = this.modpreis.getRowCount();
677 posnr = ((String)((Vector)preis.get(i)).get(0)).trim();
678 getroffen = false;
679 for(int b = 0; b < bisheranzahl; b++){
680 if( ((String)((Vector)tab.get(b)).get(0)).trim().equals(posnr.trim())){
681 getroffen = true;
682 modpreis.setValueAt(Double.parseDouble(((String)((Vector)preis.get(i)).get(1))), b, 3);
683 if(mitbezeich){
684 modpreis.setValueAt(((String)((Vector)preis.get(i)).get(3)), b, 2);
688 if(!getroffen){
689 preisAufnahme(getroffen,preis,i);
690 getroffen = true;;
694 if(preis.size()> 0){
695 int aktrow = plserver.getSelectedRow();
696 String datum = (String)plserver.getValueAt(aktrow,3);
697 gueltig.setText(datum);
698 jcmb[2].setSelectedItem(plserver.getValueAt(aktrow,4).toString());
703 private void preisAufnahme(boolean getroffen,Vector preis,int i){
704 if(!getroffen && (jradio[1].isSelected() || jradio[2].isSelected())){
705 if(jradio[1].isSelected()){
706 String msg = "<html>Die Position <b><font color='#ff0000'>"+((String)((Vector)preis.get(i)).get(0))+"</font></b> mit dem Langtext<br>"+"<b><font color='#ff0000'>"+
707 ((String)((Vector)preis.get(i)).get(3))+"<br></font></b>ist in Ihrer Preisliste nicht vorhanden."+
708 "<br><br>Soll die Position in Ihre Preisliste aufgenommen werden?<br><br></html>";
709 int frage = JOptionPane.showConfirmDialog(null,msg,"Achtung wichtige Benutzeranfrage",JOptionPane.YES_NO_OPTION );
710 if(frage == JOptionPane.YES_OPTION){
711 Vector xvec = new Vector();
712 xvec.add( ((String)((Vector)preis.get(i)).get(0)) );
713 xvec.add( "Neu-"+Integer.toString(kurztext) );
714 kurztext++;
715 xvec.add( ((String)((Vector)preis.get(i)).get(3)) );
716 xvec.add( Double.parseDouble( ((String)((Vector)preis.get(i)).get(1)) ) );
717 xvec.add( Double.parseDouble( ((String)((Vector)preis.get(i)).get(1)) ) );
718 xvec.add("-1" );
719 modpreis.addRow(xvec);
720 return;
721 }else{
722 return;
724 }else{
725 Vector xvec = new Vector();
726 xvec.add( ((String)((Vector)preis.get(i)).get(0)) );
727 xvec.add( "Neu-"+Integer.toString(kurztext) );
728 kurztext++;
729 xvec.add( ((String)((Vector)preis.get(i)).get(3)) );
730 xvec.add( Double.parseDouble( ((String)((Vector)preis.get(i)).get(1)) ) );
731 xvec.add( Double.parseDouble( ((String)((Vector)preis.get(i)).get(1)) ) );
732 xvec.add("-1" );
733 modpreis.addRow(xvec);
739 private Vector<?> doHolePreiseNeu(){
740 int row = plserver.getSelectedRow();
741 String hmsparte = (String) plserver.getValueAt(row, 0);
742 String preisgruppe = (String) plserver.getValueAt(row, 1);
743 String bundesland = (String) plserver.getValueAt(row, 2);
744 if(bundesland.equals("bundesweit")){
745 //bundesland = "./.";
746 // gibt's auf dem Preislistenserver nicht mehr
748 String cmd = null;
749 cmd = "select posnr,preis,gueltigab,langtext from allepreise where disziplin='"+
750 hmsparte+"' AND buland='"+bundesland+"' AND preisgruppe='"+preisgruppe+"'";
751 //Vector vec = SqlInfo.holeFelder(cmd);
752 PLServerAuslesen plServ = new PLServerAuslesen();
753 Vector<Vector<String>> vec = PLServerAuslesen.holeFelder(cmd);
754 plServ.schliessePLConnection();
755 //System.out.println("Statement = "+cmd);
756 System.out.println("Vector-Größe = "+vec.size());
757 return (Vector<?>) vec.clone();
760 private void doSetzeNeuAufAlt(){
761 int anzahl = modpreis.getRowCount();
762 double wert;
763 for(int i = 0; i < anzahl;i++){
764 wert = (Double)modpreis.getValueAt(i, 3);
765 modpreis.setValueAt(wert, i, 4);
769 private void testeAllepreise(String disziplin){
770 List<String> pbundesweit = Arrays.asList(new String[] {"VdEK","PBeaKK","BG","Beihilfe"});
771 Vector vec1 = null;
772 Vector vec2 = new Vector();
773 String testbuland = "";
774 String testpg = "";
775 String buland = "";
776 String preisgr = "";
777 String gueltig = "";
778 Vector vbuland = new Vector();
779 Vector vpreisgruppe = new Vector();
780 Vector testgruppe = new Vector();
781 modserver.setRowCount(0);
782 String cmd = "select buland,preisgruppe,gueltigab,regel from allepreise where disziplin='"+disziplin+"' ORDER BY preisgruppe,buland";
783 //vec1 = SqlInfo.holeFelder("select buland,preisgruppe,gueltigab from allepreise where disziplin='"+disziplin+"' ORDER BY buland,preisgruppe");
784 PLServerAuslesen plServ = new PLServerAuslesen();
785 vec1 = PLServerAuslesen.holeFelder(cmd);
786 plServ.schliessePLConnection();
788 if(vec1.size()<= 0){
789 JOptionPane.showMessageDialog(null,"Bislang sind für -> "+disziplin+" <- keine Preislisten auf dem Server hinterlegt");
790 }else{
791 ////System.out.println("Gr��e des Vectors = "+vec1.size());
792 //buland = ((String)((Vector)vec1.get(0)).get(0)).trim();
793 //preisgr = ((String)((Vector)vec1.get(0)).get(1)).trim();
794 //vbuland.add(buland);
795 //vpreisgruppe.add(preisgr);
796 int anzahl = vec1.size();
798 for(int y = 0; y < anzahl;y++){
799 testbuland = ((String)((Vector)vec1.get(y)).get(0)).trim();
800 testpg = ((String)((Vector)vec1.get(y)).get(1)).trim();
801 vec2.clear();
802 if(! testgruppe.contains(testbuland+testpg)){
803 //if( (!vbuland.contains(testbuland)) || (!vpreisgruppe.contains(testpg))){
804 testgruppe.add(testbuland+testpg);
805 buland = ((String)((Vector)vec1.get(y)).get(0)).trim();
806 preisgr = ((String)((Vector)vec1.get(y)).get(1)).trim();
808 vec2.add(disziplin);
809 vec2.add(preisgr);
810 //vec2.add( buland );
811 vec2.add( (pbundesweit.contains(preisgr) ? "bundesweit" : buland) );
812 try{
813 gueltig = DatFunk.sDatInDeutsch( ((String)((Vector)vec1.get(y)).get(2)).trim() );
814 vec2.add( gueltig );
815 }catch(Exception ex){
816 vec2.add(DatFunk.sHeute());
818 try{
819 vec2.add( zzart[ Integer.parseInt( ((String)((Vector)vec1.get(y)).get(3)).trim() ) ] );
820 }catch(Exception ex){
821 vec2.add(zzart[0]);
823 modserver.addRow((Vector)vec2.clone());
824 vbuland.add(buland);
825 vpreisgruppe.add(preisgr);
829 plserver.setRowSelectionInterval(0,0);
833 return;
836 public JPanel getPlupdate(){ // 1 2 3 4 5 6 7 8 9
837 FormLayout lay = new FormLayout("right:max(60dlu;p), 4dlu, 7dlu, 4dlu, 70dlu, 4dlu, 0dlu, 4dlu, 70dlu",
838 //1. 2. 3. 4. 5. 6. 7. 8. 9.10. 11.12. 13. 14.15. 16.17. 18. 19. 20. 21. 22. 23.
839 "p, 2dlu, p, 2dlu, 100dlu,10dlu,p,2dlu,p,5dlu,p,2dlu,p,2dlu,p,2dlu,p,5dlu,p");
841 PanelBuilder builder = new PanelBuilder(lay);
842 builder.setDefaultDialogBorder();
843 builder.getPanel().setOpaque(false);
844 CellConstraints cc = new CellConstraints();
845 plEinlesen = new JButton("Verfügbare Preislisten einlesen");
846 plEinlesen.setActionCommand("pleinlesen");
847 plEinlesen.addActionListener(this);
848 builder.add(plEinlesen,cc.xyw(3,1,7));
849 builder.addLabel("Übernahme auf",cc.xy(1,3));
850 jcmb[3] = new JRtaComboBox();
851 jcmb[3].setActionCommand("plwahl");
852 jcmb[3].addActionListener(this);
853 builder.add(jcmb[3],cc.xyw(3,3,7));
854 modserver.setColumnIdentifiers(new String[] {"HM-Sparte","Preisgruppe","Bundesland","gueltig ab","Anwendung"});
855 plserver = new JXTable(modserver);
856 plserver.getColumn(0).setMaxWidth(70);
857 plserver.getColumn(0).setMinWidth(70);
858 plserver.getColumn(3).setMaxWidth(70);
859 plserver.getColumn(3).setMinWidth(70);
860 JScrollPane jscr = JCompTools.getTransparentScrollPane(plserver);
861 jscr.validate();
863 new SwingWorker(){
864 @Override
865 protected Object doInBackground() throws Exception {
866 tabelleRegeln();
867 return null;
869 }.execute();
871 builder.add(jscr,cc.xyw(1,5,9));
873 bezeich = new JRtaCheckBox();
874 bezeich.setOpaque(false);
875 builder.addLabel("Langtext-Bezeichnungen vom Preislistenserver übernehmen?",cc.xyw(1, 7, 8));
876 builder.add(bezeich,cc.xy(9, 7,CellConstraints.RIGHT,CellConstraints.BOTTOM));
877 builder.addLabel("Bisher aktuelle Preise auf 'Alte-Preise' übertragen?",cc.xyw(1, 9, 8));
878 neuaufalt = new JRtaCheckBox();
879 neuaufalt.setOpaque(false);
880 neuaufalt.setSelected(true);
881 builder.add(neuaufalt,cc.xy(9, 9,CellConstraints.RIGHT,CellConstraints.BOTTOM));
882 //jradiogroup
883 jradio[0] = new JRtaRadioButton("nicht hinzufügen");
884 jradio[0].setHorizontalTextPosition(SwingConstants.LEFT);
885 jradio[0].setOpaque(false);
886 jradiogroup.add(jradio[0]);
887 jradio[1] = new JRtaRadioButton("vorher nachfragen");
888 jradio[1].setHorizontalTextPosition(SwingConstants.LEFT);
889 jradio[1].setOpaque(false);
890 jradiogroup.add(jradio[1]);
891 jradio[2] = new JRtaRadioButton("automat. hinzufügen");
892 jradio[2].setHorizontalTextPosition(SwingConstants.LEFT);
893 jradio[2].setOpaque(false);
894 jradiogroup.add(jradio[2]);
895 jradio[0].setSelected(true);
897 builder.addLabel("Wenn sich in der Datenbank neue Positionen befinden",cc.xy(1, 11));
898 builder.add(jradio[0],cc.xyw(5, 11, 5,CellConstraints.RIGHT,CellConstraints.CENTER));
899 builder.add(jradio[1],cc.xyw(5, 13, 5,CellConstraints.RIGHT,CellConstraints.CENTER));
900 builder.add(jradio[2],cc.xyw(5, 15, 5,CellConstraints.RIGHT,CellConstraints.CENTER));
902 ueber = new JButton("übernehmen");
903 ueber.setActionCommand("uebernehmen");
904 ueber.addActionListener(this);
905 zurueck = new JButton("zurueck");
906 zurueck.setActionCommand("zurueck");
907 zurueck.addActionListener(this);
908 builder.addLabel("übernehmen?",cc.xy(1, 19));
909 builder.add(ueber,cc.xy(5,19));
910 builder.addLabel("Abbruch?", cc.xy(7, 19));
911 builder.add(zurueck,cc.xy(9,19));
913 return builder.getPanel();
918 public void tabelleRegeln(){
920 String spreisart = Integer.toString(jcmb[1].getSelectedIndex() +1);
921 Vector preisvec = holePreisVec();
922 if(preisvec==null){
923 modpreis.setRowCount(0);
924 return;
926 int ipreis = jcmb[1].getSelectedIndex()+1;
927 modpreis.setRowCount(0);
929 int anzahl = preisvec.size();
931 String[] diszi = {"Physio","Massage","Ergo","Logo","Reha","Podo"};
932 //String disziplin = jcmb[0].getSelectedItem().toString();
933 int preisgruppe = jcmb[1].getSelectedIndex();
934 int idisziplin = jcmb[0].getSelectedIndex();
935 ////System.out.println("Preisvec = "+preisvec);
936 Vector vec = new Vector();
937 int idpos = 0;
938 if(anzahl > 0){
939 idpos = ((Vector)preisvec.get(0)).size()-1;
941 for(int i = 0;i < anzahl ; i++){
942 vec.clear();
943 vec.add( (String) ((Vector)preisvec.get(i)).get(2));
944 vec.add((String)((Vector)preisvec.get(i)).get(1));
945 vec.add((String)((Vector)preisvec.get(i)).get(0));
946 try{
947 vec.add(Double.parseDouble( (String) ((Vector)preisvec.get(i)).get( 3) ) );
948 }catch(Exception ex){
949 vec.add(Double.parseDouble("0.00"));
951 try{
952 vec.add(Double.parseDouble( (String) ((Vector)preisvec.get(i)).get( 4) ) );
953 }catch(Exception ex){
954 vec.add(Double.parseDouble("0.00"));
956 vec.add( (String) ((Vector)preisvec.get(i)).get(idpos) );
957 modpreis.addRow((Vector)vec.clone());
959 try{
960 if(SystemPreislisten.hmNeuePreiseAb.get(diszi[idisziplin]).get(preisgruppe).equals("")){
961 gueltig.setText(" . . ");
962 //System.out.println("Gültigkeitsdatum nicht angegeben");
963 }else{
964 gueltig.setText(SystemPreislisten.hmNeuePreiseAb.get(diszi[idisziplin]).get(preisgruppe));
966 }catch(Exception ex){
967 ex.printStackTrace();
968 gueltig.setText(" . . ");
971 preislisten.validate();
977 private Vector holePreisVec(){
978 String[] diszi = {"Physio","Massage","Ergo","Logo","Reha","Podo"};
979 int pgs = jcmb[0].getSelectedIndex();
980 try{
982 int pgGruppe = jcmb[1].getSelectedIndex();
983 //String[] diszi = {"Physio","Massage","Ergo","Logo","Reha","Podo"};
984 setCursor(Reha.thisClass.normalCursor);
985 return (SystemPreislisten.hmPreise.get(diszi[pgs]).get(pgGruppe) != null ? SystemPreislisten.hmPreise.get(diszi[pgs]).get(pgGruppe) : null) ;
986 }catch(Exception ex){
987 //ex.printStackTrace();
988 JOptionPane.showMessageDialog(null,"Diese Preisliste existiert nicht, oder Sie verfügen nicht über die Disziplin -> "+diszi[pgs]);
990 return null;
992 /*****************vor Ende Klassenklammer*************/
997 class MyPreislistenTableModel extends DefaultTableModel{
1001 private static final long serialVersionUID = 1L;
1003 public Class<?> getColumnClass(int columnIndex) {
1004 if(columnIndex==3 || columnIndex==4){
1005 return Double.class;
1007 return String.class;
1010 public boolean isCellEditable(int row, int col) {
1011 if(col == 5){
1012 return false;
1014 return true;
1018 class MyServerTableModel extends DefaultTableModel{
1022 private static final long serialVersionUID = 1L;
1024 public Class<?> getColumnClass(int columnIndex) {
1025 return String.class;
1029 public boolean isCellEditable(int row, int col) {
1030 return false;