1 package systemEinstellungen
;
3 import hauptFenster
.Reha
;
5 import java
.awt
.BorderLayout
;
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
{
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;
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();
85 JPanel plupdate
= null;
87 JButton plEinlesen
= null;
90 JButton posneu
= null;
91 JButton posdel
= null;
92 JButton speichern
= null;
93 JButton abbruch
= null;
94 JButton zurueck
= 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));
110 setBackgroundPainter(Reha
.thisClass
.compoundPainter
.get("SystemInit"));
112 pledit
= getVorlagenSeite();
113 add(pledit
,BorderLayout
.CENTER
);
115 new SwingWorker
<Void
,Void
>(){
117 protected Void
doInBackground() throws Exception
{
119 plupdate
= getPlupdate();
121 }catch(Exception ex
){
122 ex
.printStackTrace();
130 /************** Beginn der Methode für die Objekterstellung und -platzierung *********/
131 private JPanel
getVorlagenSeite(){
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" );
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(){
194 public void mouseClicked(MouseEvent arg0
) {
195 preislisten
.requestFocus();
196 if(arg0
.getClickCount()==1){
197 final MouseEvent xarg0
= arg0
;
198 SwingUtilities
.invokeLater(new Runnable(){
200 preislisten
.setRowSelectionInterval(preislisten
.getSelectedRow(), preislisten
.getSelectedRow());
201 preislisten
.setColumnSelectionInterval(preislisten
.getSelectedColumn(), preislisten
.getSelectedColumn());
202 //startCellEditing(tarife,tarife.getSelectedRow(),tarife.getSelectedColumn());
207 }else if(arg0
.getClickCount()==2){
208 SwingUtilities
.invokeLater(new Runnable(){
210 preislisten
.setRowSelectionInterval(preislisten
.getSelectedRow(), preislisten
.getSelectedRow());
211 preislisten
.setColumnSelectionInterval(preislisten
.getSelectedColumn(), preislisten
.getSelectedColumn());
212 startCellEditing(preislisten
,preislisten
.getSelectedRow(),preislisten
.getSelectedColumn());
219 public void mouseEntered(MouseEvent arg0
) {
220 // TODO Auto-generated method stub
225 public void mouseExited(MouseEvent arg0
) {
226 // TODO Auto-generated method stub
231 public void mousePressed(MouseEvent arg0
) {
232 // TODO Auto-generated method stub
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(){
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
);
278 protected Object
doInBackground() throws Exception
{
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");
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){
329 preislisten
.setRowSelectionInterval(row
, row
);
330 preislisten
.setColumnSelectionInterval(col
, col
);
336 private void fuelleMitWerten(){
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());
343 //heilmittel[i].setSelected(true);
345 //heilmittel[i].setSelected(false);
349 jcmb
[0].setSelectedItem(SystemConfig
.initRezeptKlasse
);
353 public void keyPressed(KeyEvent e
) {
354 String name
= ((JComponent
)e
.getSource()).getName();
356 //System.out.println("Listener des Panels ----> TastaturEvent von "+name+" ausgelöst. Gedrückte Taste = "+e.getKeyChar());
362 public void keyReleased(KeyEvent e
) {
363 // TODO Auto-generated method stub
368 public void keyTyped(KeyEvent e
) {
369 // TODO Auto-generated method stub
372 private SysUtilPreislisten
getInstance(){
377 public void actionPerformed(ActionEvent e
) {
378 // TODO Auto-generated method stub
379 String cmd
= e
.getActionCommand();
380 if(cmd
.equals("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(){
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(){
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);
423 add(plupdate
,BorderLayout
.CENTER
);
430 if(cmd
.equals("zurueck")){
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
));
447 nvec
.add(new Double("0.00"));
448 nvec
.add(new Double("0.00"));
450 modpreis
.addRow((Vector
) nvec
.clone());
451 preislisten
.validate();
452 final int xrow
= row
;
453 SwingUtilities
.invokeLater(new Runnable(){
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
){
469 int row
= preislisten
.getSelectedRow();
473 String sid
= (String
) preislisten
.getValueAt(row
,5);
474 if(!sid
.equals("-1")){
477 TableTool
.loescheRow(preislisten
, row
);
479 if(cmd
.equals("speichern")){
480 //Position in lokaler Liste l�schen
481 new SwingWorker
<Void
,Void
>(){
483 protected Void
doInBackground() throws Exception
{
487 if(Reha.demoversion){
488 JOptionPane.showMessageDialog(null, "Die Funktion -> Preisliste speichern <- ist in der Entwicklungsversion von Thera-Pi deaktiviert!");
494 }catch(Exception ex
){
495 ex
.printStackTrace();
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
>(){
511 protected Void
doInBackground() throws Exception
{
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();
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",""});
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;
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")){
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
);
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='"+
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("") ){
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
);
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(){
616 add(pledit
,BorderLayout
.CENTER
);
622 private void doUebernahme(){
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!");
631 int row
= plserver
.getSelectedRow();
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!");
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
){
651 setCursor(Reha
.thisClass
.wartenCursor
);
652 Reha
.thisClass
.Rehaprogress
.setIndeterminate(true);
653 if(neuaufalt
.isSelected()){
656 Vector preis
= doHolePreiseNeu();
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();
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();
679 for(int b
= 0; b
< bisheranzahl
; b
++){
680 if( ((String
)((Vector
)tab
.get(b
)).get(0)).trim().equals(posnr
.trim())){
682 modpreis
.setValueAt(Double
.parseDouble(((String
)((Vector
)preis
.get(i
)).get(1))), b
, 3);
684 modpreis
.setValueAt(((String
)((Vector
)preis
.get(i
)).get(3)), b
, 2);
689 preisAufnahme(getroffen
,preis
,i
);
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
) );
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)) ) );
719 modpreis
.addRow(xvec
);
725 Vector xvec
= new Vector();
726 xvec
.add( ((String
)((Vector
)preis
.get(i
)).get(0)) );
727 xvec
.add( "Neu-"+Integer
.toString(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)) ) );
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
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();
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"});
772 Vector vec2
= new Vector();
773 String testbuland
= "";
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();
789 JOptionPane
.showMessageDialog(null,"Bislang sind für -> "+disziplin
+" <- keine Preislisten auf dem Server hinterlegt");
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();
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();
810 //vec2.add( buland );
811 vec2
.add( (pbundesweit
.contains(preisgr
) ?
"bundesweit" : buland
) );
813 gueltig
= DatFunk
.sDatInDeutsch( ((String
)((Vector
)vec1
.get(y
)).get(2)).trim() );
815 }catch(Exception ex
){
816 vec2
.add(DatFunk
.sHeute());
819 vec2
.add( zzart
[ Integer
.parseInt( ((String
)((Vector
)vec1
.get(y
)).get(3)).trim() ) ] );
820 }catch(Exception ex
){
823 modserver
.addRow((Vector
)vec2
.clone());
825 vpreisgruppe
.add(preisgr
);
829 plserver
.setRowSelectionInterval(0,0);
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
);
865 protected Object doInBackground() throws Exception {
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
));
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();
923 modpreis
.setRowCount(0);
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();
939 idpos
= ((Vector
)preisvec
.get(0)).size()-1;
941 for(int i
= 0;i
< anzahl
; i
++){
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));
947 vec
.add(Double
.parseDouble( (String
) ((Vector
)preisvec
.get(i
)).get( 3) ) );
948 }catch(Exception ex
){
949 vec
.add(Double
.parseDouble("0.00"));
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());
960 if(SystemPreislisten
.hmNeuePreiseAb
.get(diszi
[idisziplin
]).get(preisgruppe
).equals("")){
961 gueltig
.setText(" . . ");
962 //System.out.println("Gültigkeitsdatum nicht angegeben");
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();
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
]);
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
) {
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
) {