*** empty log message ***
[thera-pi.git] / Reha / src / roogle / SuchenSeite.java
blob6809ff28c9028a4034171fbc7734b40433538060
1 package roogle;
3 import hauptFenster.Reha;
5 import java.awt.BorderLayout;
6 import java.awt.Color;
7 import java.awt.Component;
8 import java.awt.Cursor;
9 import java.awt.Dimension;
10 import java.awt.FlowLayout;
11 import java.awt.GridBagConstraints;
12 import java.awt.GridBagLayout;
13 import java.awt.GridLayout;
14 import java.awt.LinearGradientPaint;
15 import java.awt.event.ActionEvent;
16 import java.awt.event.ActionListener;
17 import java.awt.event.FocusEvent;
18 import java.awt.event.FocusListener;
19 import java.awt.event.KeyEvent;
20 import java.awt.event.KeyListener;
21 import java.awt.event.MouseAdapter;
22 import java.awt.event.MouseEvent;
23 import java.awt.event.WindowEvent;
24 import java.awt.event.WindowListener;
25 import java.awt.geom.Point2D;
26 import java.beans.PropertyChangeEvent;
27 import java.beans.PropertyChangeListener;
28 import java.io.BufferedWriter;
29 import java.io.File;
30 import java.io.FileOutputStream;
31 import java.io.FileWriter;
32 import java.io.IOException;
33 import java.io.OutputStreamWriter;
34 import java.lang.reflect.Array;
35 import java.sql.ResultSet;
36 import java.sql.SQLException;
37 import java.sql.Statement;
38 import java.text.ParseException;
39 import java.util.ArrayList;
40 import java.util.Arrays;
41 import java.util.Collections;
42 import java.util.Comparator;
43 import java.util.HashMap;
44 import java.util.List;
45 import java.util.Observable;
46 import java.util.Observer;
47 import java.util.Vector;
49 import javax.swing.AbstractCellEditor;
50 import javax.swing.BorderFactory;
51 import javax.swing.Box;
52 import javax.swing.DefaultCellEditor;
53 import javax.swing.Icon;
54 import javax.swing.ImageIcon;
55 import javax.swing.JButton;
56 import javax.swing.JCheckBox;
57 import javax.swing.JComponent;
58 import javax.swing.JFormattedTextField;
59 import javax.swing.JLabel;
60 import javax.swing.JMenuItem;
61 import javax.swing.JOptionPane;
62 import javax.swing.JPanel;
63 import javax.swing.JPopupMenu;
64 import javax.swing.JProgressBar;
65 import javax.swing.JScrollPane;
66 import javax.swing.JTable;
67 import javax.swing.JTextField;
68 import javax.swing.SwingConstants;
69 import javax.swing.SwingUtilities;
72 import javax.swing.JFormattedTextField.AbstractFormatterFactory;
73 import javax.swing.event.TableModelEvent;
74 import javax.swing.event.TableModelListener;
75 import javax.swing.table.AbstractTableModel;
76 import javax.swing.table.DefaultTableCellRenderer;
77 import javax.swing.table.DefaultTableModel;
78 import javax.swing.table.TableCellEditor;
79 import javax.swing.table.TableCellRenderer;
80 import javax.swing.text.DefaultFormatterFactory;
81 import javax.swing.text.MaskFormatter;
83 import jxTableTools.ToolTipRenderer;
84 import jxTableTools.ZahlTableCellEditor;
85 import jxTableTools.ZeitCancelCellEditor;
86 import jxTableTools.ZeitTableCellEditor;
88 import org.jdesktop.swingworker.SwingWorker;
89 import org.jdesktop.swingx.JXPanel;
90 import org.jdesktop.swingx.JXTable;
91 import org.jdesktop.swingx.decorator.ColorHighlighter;
92 import org.jdesktop.swingx.decorator.HighlightPredicate;
93 import org.jdesktop.swingx.decorator.HighlighterFactory;
94 import org.jdesktop.swingx.painter.CompoundPainter;
95 import org.jdesktop.swingx.painter.MattePainter;
96 import org.jdesktop.swingx.renderer.DefaultTableRenderer;
97 import org.jdesktop.swingx.renderer.IconValue;
98 import org.jdesktop.swingx.renderer.IconValues;
99 import org.jdesktop.swingx.renderer.JRendererCheckBox;
100 import org.jdesktop.swingx.renderer.MappedValue;
101 import org.jdesktop.swingx.renderer.StringValue;
102 import org.jdesktop.swingx.renderer.StringValues;
103 import org.jdesktop.swingx.table.TableColumnExt;
104 import org.therapi.reha.patient.LadeProg;
115 import rechteTools.Rechte;
116 import stammDatenTools.RezTools;
117 import systemEinstellungen.SystemConfig;
118 import CommonTools.Colors;
119 import systemTools.IntegerTools;
120 import CommonTools.JRtaTextField;
121 import CommonTools.StringTools;
122 import terminKalender.ICalGenerator;
123 import terminKalender.ParameterLaden;
124 import terminKalender.DatFunk;
125 import terminKalender.ZeitFunk;
126 import CommonTools.ExUndHop;
127 import CommonTools.SqlInfo;
129 import com.jgoodies.forms.builder.PanelBuilder;
130 import com.jgoodies.forms.layout.CellConstraints;
131 import com.jgoodies.forms.layout.FormLayout;
133 import dialoge.InfoDialog;
134 import emailHandling.EmailSendenExtern;
135 @SuppressWarnings({ "unchecked", "unused" })
136 public class SuchenSeite extends JXPanel implements TableModelListener,FocusListener, ActionListener,PropertyChangeListener, KeyListener{
140 private static final long serialVersionUID = 1L;
141 public SuchenSeite thisClass = null;
142 private JXPanel panLinks = null;
143 private JXPanel panRechts = null;
144 private JRtaTextField sucheName = null;
145 private JRtaTextField sucheNummer = null;
146 private JRtaTextField schreibeName = null;
147 private JRtaTextField schreibeNummer = null;
149 private JButton sucheStarten = null;
150 private JButton sucheWeiter = null;
151 private JButton sucheStoppen = null;
152 private JButton auswahlUebernahme = null;
153 private JButton auswahlDrucken = null;
154 private JButton auswahlInDatei = null;
155 private JButton auswahlPerEmail = null;
156 private JButton allesMarkieren = null;
157 private JButton allesEntmarkieren = null;
158 private JButton allesZuruecksetzen = null;
159 private JProgressBar fortschritt = null;
161 private JLabel startLbl = null;
162 private JLabel stopLbl = null;
163 private JLabel aktLbl = null;
164 private JLabel aktLblLegende = null;
166 private JLabel trefferLbl = null;
167 private JLabel ausgewaehltLbl = null;
168 public static JLabel verarbeitetLbl = null;
169 public JXTable jxSucheTable = null;
171 //private MyRoogleSuche myTable = null;
172 public DefaultTableModel dtblm = null;
173 /****************************/
174 public String aktuellesDatum = null;
175 public static boolean mussUnterbrechen = false;
176 private int[] suchenTage = {0,0,0,0,0,0,0};
177 public Vector<Vector<String>> sucheDaten = new Vector<Vector<String>>();
178 //public static Rdaten rooDaten = new Rdaten();
179 public Vector <Vector<Object>>vecWahl = new Vector<Vector<Object>>();
180 private boolean suchelaeuft = false;
181 public Object[][] sucheKollegen = null;
182 public HashMap<String,Integer> hZeiten = null;
183 private int gewaehlt = 0;
184 public ArrayList<Boolean> selbstGesperrt;
185 public static boolean verarbeitenBeendet = false;
186 private String zeit = "";
187 private int zeilengewaehlt = 0;
188 public static boolean schicht;
189 public static boolean selektiv;
190 public String[] selectUhr = {null,null,null,null};
191 public boolean[] selectWal = {false,false,false,false};
192 public String[] schichtUhr = {null,null};
193 public boolean[] schichtWal = {false,false};
194 public boolean[] schichtVor = {false,false};
195 public String[] kollegenAbteilung = null;
196 public boolean[] kollegenSuchen = null;
197 public JScrollPane ptc = null;
198 public boolean workerfertig = true;
199 public String selektbeginn;
200 public String schichtbeginn;
201 public RoogleFenster eltern;
202 public boolean nachfolgerloeschen = false;
204 public InfoDialog infoDlg = null;
205 public KeyListener kl = null;
206 SuchenSeite(RoogleFenster xeltern){
207 super();
208 activateKl();
209 setBorder(null);
210 setLayout(new GridBagLayout());
211 erstelleGridBag();
212 validate();
213 addFocusListener(this);
214 addPropertyChangeListener(this);
215 addKeyListener(this);
216 this.eltern = xeltern;
219 public void setWorkerFertig(boolean wert){
220 workerfertig = wert;
222 public SuchenSeite getInstance(){
223 return this;
225 public void setzeDatum(String sdat){
226 aktLbl.setText(sdat);
228 public void setKollegenSuchen(boolean[] kollSuchen){
229 kollegenSuchen = kollSuchen;
231 public boolean getKollegenSuchen(int koll){
232 return this.kollegenSuchen[koll];
234 public void setKollegenAbteilung(String[] kolls){
235 kollegenAbteilung = kolls;
237 public String getKollegenAbteilung(int koll){
238 return this.kollegenAbteilung[koll];
240 public void setzeTreffer(int treffer){
241 trefferLbl.setText(Integer.toString(treffer));
243 public void setzeZeilenAusgewaehlt(int xgewaehlt){
244 ausgewaehltLbl.setText(Integer.toString(xgewaehlt));
246 public String getStartDatum(){
247 return startLbl.getText();
249 public String getStopDatum(){
250 return stopLbl.getText();
252 public String getAktDatum(){
253 return aktLbl.getText();
255 public String getSuchName(){
256 return sucheName.getText();
258 public String getSuchNummer(){
259 return sucheNummer.getText();
261 public void setSucheBeendet(){
262 mussUnterbrechen = true;
263 sucheStoppen.setEnabled(false);
264 sucheStarten.setEnabled(true);
266 public boolean getSucheBeendet(){
267 return mussUnterbrechen;
269 public void setFortschrittRang(int von, long bis){
270 fortschritt.setForeground(Color.RED);
271 fortschritt.setMinimum(von);
272 fortschritt.setMaximum((int) bis);
274 public void setFortschrittSetzen(int wert){
275 fortschritt.setValue(wert);
277 public JProgressBar getFortschritt(){
278 return fortschritt;
281 public void setFortschrittZeigen(boolean zeigen){
282 fortschritt.setVisible(zeigen);
286 synchronized public void setDatenVector(Vector vec){
287 sucheDaten.add(vec);
291 synchronized public Vector getDatenVector(){
292 return (Vector)sucheDaten;
295 public static void verarbeitungEinschalten(){
298 public void setKollegenEinstellen(Object[][] obj){
299 sucheKollegen = obj; //obj.clone();
301 public Object[][] getKollegenEinstellen(){
302 return sucheKollegen;
304 public void setKollegenZeiten(HashMap<String,Integer> xhZeiten){
305 hZeiten = ((HashMap<String,Integer>)xhZeiten);//((HashMap<String,Integer>)hZeiten.clone());
307 public HashMap<String,Integer> getKollegenZeiten(){
308 return this.hZeiten;
311 public void setGewaehlt(int gewaehlt){
312 this.gewaehlt = gewaehlt;
314 public int getGewaehlt(){
315 return this.gewaehlt;
317 public void setZeit(){
318 this.zeit = Long.valueOf(System.currentTimeMillis()).toString();
320 public String getZeit(){
321 return this.zeit;
324 public int getTreffer(){
325 return Integer.parseInt(trefferLbl.getText());
328 public boolean tagDurchsuchen(String sdatum){
329 boolean ret = false;
330 if(suchenTage[DatFunk.TagDerWoche(sdatum)-1]==0){
331 ret = false;
332 }else{
333 ret = true;
335 return ret;
337 public void datumEinstellen(){
338 startLbl.setText(eltern.zeitraumEdit[0].getText());
339 stopLbl.setText(eltern.zeitraumEdit[1].getText());
341 public void tageEinstellen(){
342 for(int i = 0;i<7;i++){
343 suchenTage[i] = (eltern.tageCheck[i].isSelected() ? 1 : 0);
345 sucheName.requestFocus();
347 public void behandlerEinstellen(){
350 public void zeileTesten(Vector vtest){
351 //((MyRoogleSuche) thisClass.jxSucheTable.getModel()).addDaten(vtest);
354 public void tabelleAusschalten(){
355 jxSucheTable.setEditable(false);
356 jxSucheTable.setRowSelectionAllowed(false);
358 public void tabelleEinschalten(){
359 jxSucheTable.setEditable(true);
360 jxSucheTable.setRowSelectionAllowed(true);
363 void listenerEinschalten(){
364 dtblm.addTableModelListener(this);
366 void listenerAusschalten(){
367 dtblm.removeTableModelListener(this);
369 public void cursorWait(boolean ein){
370 if(!ein){
371 this.setCursor(Reha.thisClass.normalCursor);
372 }else{
373 this.setCursor(Reha.thisClass.wartenCursor);
377 private void activateKl(){
378 kl = new KeyListener(){
379 @Override
380 public void keyTyped(KeyEvent e) {
382 @Override
383 public void keyPressed(KeyEvent e) {
384 if(e.getKeyCode() == KeyEvent.VK_F1){
385 if(infoDlg != null){
386 return;
388 int row = jxSucheTable.getSelectedRow();
389 if(row < 0){
390 return;
392 String reznummer = InfoDialog.macheNummer(jxSucheTable.getValueAt(row, 9).toString());
393 if(reznummer.equals("")){
394 return;
396 infoDlg = new InfoDialog(reznummer,"terminInfo",null);
397 infoDlg.pack();
398 infoDlg.setLocationRelativeTo(null);
399 infoDlg.setVisible(true);
400 infoDlg = null;
403 @Override
404 public void keyReleased(KeyEvent e) {
410 /******************************************/
412 private void erstelleGridBag(){
414 GridBagConstraints cc = new GridBagConstraints();
416 cc.anchor = GridBagConstraints.FIRST_LINE_START;
417 cc.gridx = 0;
418 cc.gridy = 0;
419 cc.gridwidth = 1;
420 cc.gridheight = 1;
421 cc.weightx = 0.00;
422 cc.weighty = 1.00;
423 cc.fill = GridBagConstraints.BOTH;
424 add(machePaneLinks(),cc);
426 cc.anchor = GridBagConstraints.PAGE_START;
427 cc.gridx = 1;
428 cc.gridy = 0;
429 cc.gridwidth = 3;
430 cc.gridheight = 1;
431 cc.weightx = 3.75;
432 cc.weighty = 1.00;
433 cc.fill = GridBagConstraints.BOTH;
434 add(machePaneRechts(),cc);
435 validate();
438 private JXPanel machePaneLinks(){
439 panLinks = new JXPanel(new BorderLayout());
440 panLinks.setBorder(BorderFactory.createEmptyBorder(10, 0, 5, 0));
441 panLinks.setBackgroundPainter(Reha.thisClass.compoundPainter.get("SuchenSeite"));
442 //panLinks.setBackground(Color.WHITE);
443 JScrollPane jscr = new JScrollPane();
444 jscr.setOpaque(false);
445 jscr.getViewport().setOpaque(false);
446 jscr.setBorder(null);
447 //jscr.setViewportView(new JXPanel());
448 jscr.setViewportView(formLinks());
449 panLinks.add(jscr,BorderLayout.CENTER);
450 panLinks.validate();
451 return panLinks;
453 private JXPanel machePaneRechts(){
454 panRechts = new JXPanel(new BorderLayout());
455 panRechts.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
456 panRechts.setBackground(Color.WHITE);
457 panRechts.validate();
459 JScrollPane jscr = new JScrollPane();
460 jscr.setBorder(null);
461 jscr.setBackground(Color.WHITE);
462 jscr.setViewportView(formRechts());
463 panRechts.add(jscr,BorderLayout.CENTER);
465 //panRechts.add(formRechts(),BorderLayout.CENTER);
466 return panRechts;
468 private JPanel formLinks(){
469 // 1 2 3 4 5 6
470 String spalten = "5dlu,70dlu:g,2dlu,30dlu:g,3dlu,p";
471 // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
473 String reihen = "10dlu,2dlu, p,2dlu,p,13dlu,p,2dlu,p,2dlu,p,10dlu, p, 2dlu,p, 10dlu, p , 2dlu, p , 2dlu, p , 2dlu , p, 8dlu, p, 8dlu, p ," +
474 // 28 29 30 31 32 33 34 35 36 37 38 39
475 "2dlu , p, 2dlu , p , 8dlu, p , 2dlu, p , 8dlu , p, 8dlu,p";
477 // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 f1 f2 18 19 20 21 22 23 24 25 26 27
478 String reihen = "10dlu,2dlu, p,2dlu,p,13dlu,p,2dlu,p,2dlu,p,10dlu, p, 2dlu,p, 10dlu, p ,2px, 8dlu ,2px, p , 2dlu, p , 8dlu , p, 8dlu, p, 8dlu, p ," +
479 // 28 29 30 31 32 33 34 35 36 37 38 39
480 "2dlu , p, 2dlu , p , 8dlu, p , 2dlu, p , 8dlu , p";
482 FormLayout lay = new FormLayout(spalten,reihen);
483 PanelBuilder builder = new PanelBuilder(lay);
484 builder.setDefaultDialogBorder();
485 builder.getPanel().setOpaque(false);
486 //builder.getPanel().setBackground(Color.WHITE);
487 CellConstraints cc = new CellConstraints();
488 builder.addSeparator("nach wem soll gesucht werden?", cc.xyw(1, 1,5));
490 //builder.addLabel("Name suchen (leer = freie Termine)",cc.xy(2, 3));
491 //builder.addLabel("Rez.Nr.",cc.xy(4, 3));
493 sucheName = new JRtaTextField("GROSS",true);
494 sucheName.setToolTipText("Geben Sie hier Ihr Suchkriterim ein, leer = freie Termine suchen!");
495 //SuchenSeite.thisClass.schreibeName.setText(drops[0]);
496 //SuchenSeite.thisClass.schreibeNummer.setText(drops[1]);
498 builder.add(sucheName,cc.xy(2,5));
500 sucheNummer = new JRtaTextField("GROSS",true);
501 sucheNummer.setToolTipText("Hier können Sie nach einer bestimmten Rezeptnummer suchen");
502 builder.add(sucheNummer,cc.xyw(4,5,3));
504 builder.addSeparator("mit was überschreiben?", cc.xyw(1, 7,5));
506 schreibeName = new JRtaTextField("GROSS",true);
507 schreibeName.setToolTipText("Mit diesem Feld können Sie bestimmen mit was oder wem (evtl.) später Termineinträge überschrieben werden");
508 builder.add(schreibeName,cc.xy(2,11));
510 schreibeNummer = new JRtaTextField("GROSS",true);
511 schreibeNummer.setToolTipText("Mit diesem Feld geben Sie an welche Rezeptnummer (evtl.) später eingetragen werden soll");
512 builder.add(schreibeNummer,cc.xyw(4,11,3));
514 if(RoogleFenster.gedropt){
515 if(RoogleFenster.sldrops[0].length() > 10){
516 sucheName.setText(RoogleFenster.sldrops[0].substring(0,10));
517 }else{
518 sucheName.setText(RoogleFenster.sldrops[0]);
520 schreibeName.setText(RoogleFenster.sldrops[0]);
521 schreibeNummer.setText(RoogleFenster.sldrops[1]);
523 builder.addSeparator("suche von / bis...", cc.xyw(1, 13,5));
525 JXPanel dummy = new JXPanel();
526 dummy.setBorder(null);
527 dummy.setOpaque(false);
528 //dummy.setBackground(Color.WHITE);
529 // 1 2 3 4 5 6
530 String dspalten = "5dlu,70dlu:g,right:5dlu:g,5dlu:g,3dlu,right:p";
531 // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
532 String dreihen = "0dlu,2dlu,p,2dlu,p,2dlu, p"; // ,2dlu,p,2dlu,p,2dlu, p, 2dlu,p";
533 FormLayout dlay = new FormLayout(dspalten,dreihen);
534 dummy.setLayout(dlay);
536 CellConstraints dcc = new CellConstraints();
537 dummy.add(new JLabel("Start bei Datum:"), dcc.xy(2,3));
538 dummy.add(new JLabel("Stop bei Datum:"), dcc.xy(2,5));
539 aktLblLegende = new JLabel(" ");
540 dummy.add(aktLblLegende, dcc.xy(2,7));
541 startLbl = new JLabel("01.01.2008");
542 startLbl.setForeground(Color.BLUE);
543 stopLbl = new JLabel("01.01.2008");
544 stopLbl.setForeground(Color.BLUE);
545 aktLbl = new JLabel(" ");
546 aktLbl.setForeground(Color.RED);
547 dummy.add(startLbl, dcc.xyw(6,3,1));
548 dummy.add(stopLbl, dcc.xyw(6,5,1));
549 dummy.add(aktLbl, dcc.xyw(6,7,1));
551 builder.add(dummy,cc.xyw(2,15,4));
553 builder.addSeparator("Funktionsaufrufe", cc.xyw(1, 17,5));
554 /*********************************************/
555 /*********************************************/
556 sucheStarten = new JButton("Suchlauf starten");
557 sucheStarten.setIcon(SystemConfig.hmSysIcons.get("buttongruen") );
558 sucheStarten.setMnemonic(KeyEvent.VK_S);
559 sucheStarten.setName("start");
560 sucheStarten.addKeyListener(this);
561 sucheStarten.setActionCommand("sstart");
562 sucheStarten.addActionListener(this);
564 sucheWeiter = new JButton("Auswahl nur(!!) drucken");
565 sucheWeiter.setEnabled(false);
566 sucheWeiter.setName("sucheWeiter");
567 sucheWeiter.addKeyListener(this);
568 sucheWeiter.setActionCommand("nurdrucken");
569 sucheWeiter.addActionListener(this);
571 sucheStoppen = new JButton("Suche unterbrechen");
572 sucheStoppen.setIcon(SystemConfig.hmSysIcons.get("buttonrot"));
573 sucheStoppen.setName("stop");
574 sucheStoppen.addKeyListener(this);
575 sucheStoppen.setEnabled(false);
576 sucheStoppen.setActionCommand("sstop");
577 sucheStoppen.addActionListener(this);
579 auswahlUebernahme = new JButton("Auswahl übernehmen");
580 auswahlUebernahme.setActionCommand("uebernahme");
581 auswahlUebernahme.addActionListener(this);
583 auswahlDrucken = new JButton("Term.Liste drucken");
584 auswahlDrucken.setActionCommand("drucken");
585 auswahlDrucken.addActionListener(this);
587 auswahlPerEmail = new JButton("per Email senden");
588 auswahlPerEmail.setActionCommand("email");
589 auswahlPerEmail.addActionListener(this);
591 auswahlInDatei = new JButton("Auswahl exportieren");
592 auswahlInDatei.setActionCommand("export");
593 auswahlInDatei.addActionListener(this);
595 allesMarkieren = new JButton("alles markieren");
596 allesMarkieren.setActionCommand("alles markieren");
597 allesMarkieren.addActionListener(this);
599 allesEntmarkieren = new JButton("alle entmarkieren");
600 allesEntmarkieren.setActionCommand("alles entmarkieren");
601 allesEntmarkieren.addActionListener(this);
603 allesZuruecksetzen = new JButton("alles zurücksetzen");
604 allesZuruecksetzen.setName("zurueck");
605 allesZuruecksetzen.addKeyListener(this);
606 allesZuruecksetzen.setActionCommand("zuruecksetzen");
607 allesZuruecksetzen.setMnemonic(KeyEvent.VK_Z);
608 allesZuruecksetzen.setForeground(Color.RED);
609 allesZuruecksetzen.addActionListener(this);
611 fortschritt = new JProgressBar();
612 fortschritt.setStringPainted(true);
614 fortschritt.setVisible(false);
615 builder.add(fortschritt,cc.xyw(2,19,4));
617 builder.add(sucheStarten,cc.xyw(2,21, 4));
618 builder.add(sucheStoppen,cc.xyw(2,23, 4));
619 builder.add(sucheWeiter,cc.xyw(2,25, 4));
620 builder.add(auswahlUebernahme,cc.xyw(2,27, 4));
621 builder.add(auswahlDrucken,cc.xyw(2,29, 4));
622 builder.add(auswahlPerEmail,cc.xyw(2,31, 4));
623 builder.add(auswahlInDatei,cc.xyw(2,33, 4));
625 builder.add(allesMarkieren,cc.xyw(2,35, 4));
626 builder.add(allesEntmarkieren,cc.xyw(2,37, 4));
627 builder.add(allesZuruecksetzen,cc.xyw(2,39, 4));
630 setKnopfGedoense(new int[] {1,0,0,0,0,0,0,0,0,0});
631 //builder.getPanel().addKeyListener(this);
632 return builder.getPanel();
634 private JPanel formRechts(){
635 String spalten = "5dlu,320dlu:g";
636 String reihen = "p,1dlu,p:g,2dlu";
637 FormLayout lay = new FormLayout(spalten,reihen);
638 PanelBuilder builder = new PanelBuilder(lay);
639 builder.getPanel().setBackground(Color.WHITE);
640 //builder.setDefaultDialogBorder();
641 CellConstraints cc = new CellConstraints();
642 JXPanel fpan = new JXPanel(new FlowLayout(FlowLayout.LEFT));
643 fpan.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
644 JLabel lab = new JLabel("Treffer: ");
645 lab.setForeground(Color.BLUE);
646 fpan.add(lab);
647 trefferLbl = new JLabel("0");
648 trefferLbl.setForeground(Color.BLUE);
649 fpan.add(trefferLbl);
650 fpan.add(new JLabel(" "));
651 fpan.add(new JLabel("Ausgewählt: "));
652 ausgewaehltLbl = new JLabel("0");
653 fpan.add(ausgewaehltLbl);
654 fpan.add(new JLabel(" "));
655 JLabel verarb = new JLabel("Verarbeitet: ");
656 verarb.setForeground(Color.RED);
657 fpan.add(verarb);
658 verarbeitetLbl = new JLabel("0");
659 verarbeitetLbl.setForeground(Color.RED);
660 fpan.add(verarbeitetLbl);
661 builder.add(fpan,cc.xy(2,1));
662 dtblm = new MyDefaultTableModel();
663 //dtblm.addTableModelListener(this);
664 // 1 2 3 4 5 6 7 8 9 10 11
665 String[] column = {"x?","G!","Datum","von","bis","Min.","Beginn","Dauer.","Namen","Rez.Nr.","Behandler",
666 // 12 13 14 15 16 17 18 19
667 "Druckzeit","Sort","Spalte","sDatum","sOrigDatum","iBlock","id","maxblock",""};
668 dtblm.setColumnIdentifiers(column);
669 jxSucheTable = new JXTable(dtblm);
670 jxSucheTable.setDoubleBuffered(true);
671 jxSucheTable.setAutoStartEditOnKeyStroke(false);
672 jxSucheTable.addMouseListener(new MouseAdapter(){
673 public void mousePressed(MouseEvent arg0){
674 arg0.consume();
676 public void mouseClicked(MouseEvent arg0) {
677 arg0.consume();
678 if(arg0.getClickCount()==2){
679 int row = jxSucheTable.getSelectedRow();
680 int col = jxSucheTable.getSelectedColumn();
681 if( (Boolean) jxSucheTable.getValueAt(row, 0)){
682 startCellEditing(jxSucheTable,row,col);
684 return;
686 if(arg0.getClickCount()==1 && arg0.getButton()==3){
687 int row = jxSucheTable.getSelectedRow();
688 int col = jxSucheTable.getSelectedColumn();
689 int row2 = jxSucheTable.rowAtPoint(arg0.getPoint());
690 if(row != row2){
691 row = row2;
693 jxSucheTable.setRowSelectionInterval(row, row);
694 if( (Boolean) jxSucheTable.getValueAt(row, 0)){
695 if(col==7){
696 ZeigePopupMenuDauer(arg0,jxSucheTable.getValueAt(row, col).toString());
699 if(Reha.thisClass.terminpanel!= null){
700 Reha.thisClass.terminpanel.setzeTerminAktuell(jxSucheTable.getValueAt(row, 2).toString().substring(3),
701 jxSucheTable.getValueAt(row, 6).toString(),
702 jxSucheTable.getValueAt(row, 10).toString());
704 return;
706 if(arg0.getClickCount()==1){
707 try{
708 int row = jxSucheTable.getSelectedRow();
709 int col = jxSucheTable.getSelectedColumn();
710 jxSucheTable.setRowSelectionInterval(row, row);
711 }catch(Exception ex){
713 return;
717 jxSucheTable.addKeyListener(kl);
719 jxSucheTable.addKeyListener(new KeyListener(){
720 @Override
721 public void keyPressed(KeyEvent arg0) {
722 if(arg0.getKeyCode() == KeyEvent.VK_SPACE){
723 //arg0.consume();
724 SwingUtilities.invokeLater(new Runnable(){
725 public void run(){
726 String reznummer = (String) ((Vector)((ArrayList)vTerm.get(belegung[aktiveSpalte[2]])).get(1)).get(aktiveSpalte[0]);
727 infoDlg = new InfoDialog(reznummer,"terminInfo");
728 infoDlg.pack();
729 infoDlg.setLocationRelativeTo(TerminFlaeche);
730 infoDlg.setVisible(true);
731 infoDlg = null;
736 @Override
737 public void keyReleased(KeyEvent arg0) {
738 // TODO Auto-generated method stub
742 @Override
743 public void keyTyped(KeyEvent arg0) {
744 // TODO Auto-generated method stub
752 /***************************/
753 //jxSucheTable.setHighlighters(HighlighterFactory.createSimpleStriping());
754 jxSucheTable.setHighlighters(HighlighterFactory.createSimpleStriping(new Color(204,255,255)));
756 ((TableColumnExt)jxSucheTable.getColumn(0)).setCellEditor(new JXTable.BooleanEditor());
758 jxSucheTable.getColumn(0).setMinWidth(25);
759 jxSucheTable.getColumn(0).setMaxWidth(25);
761 TableCellRenderer renderer = new DefaultTableRenderer(new MappedValue(StringValues.EMPTY, IconValues.ICON), JLabel.CENTER);
762 // original TableCellRenderer renderer = new DefaultTableRenderer(new MappedValue(StringValue.EMPTY, IconValue.ICON), JLabel.CENTER);
764 // ImageIcon f�r gesperrt oder nicht
765 jxSucheTable.getColumn(1).setCellRenderer(renderer);
766 jxSucheTable.getColumn(1).setMinWidth(20);
767 jxSucheTable.getColumn(1).setMaxWidth(20);
768 //Datum
769 jxSucheTable.getColumn(2).setMinWidth(80);
770 jxSucheTable.getColumn(2).setMaxWidth(80);
771 //Beginn
772 jxSucheTable.getColumn(3).setMinWidth(40);
773 jxSucheTable.getColumn(3).setMaxWidth(40);
774 DefaultTableCellRenderer crenderer = new DefaultTableCellRenderer();
775 crenderer.setHorizontalAlignment(JLabel.CENTER);
776 jxSucheTable.getColumn(3).setCellRenderer(crenderer);
777 //Ende
778 jxSucheTable.getColumn(4).setMinWidth(40);
779 jxSucheTable.getColumn(4).setMaxWidth(40);
780 jxSucheTable.getColumn(4).setCellRenderer(crenderer);
781 //Länge des Termins
782 jxSucheTable.getColumn(5).setMinWidth(40);
783 jxSucheTable.getColumn(5).setMaxWidth(40);
784 jxSucheTable.getColumn(5).setCellRenderer(crenderer);
785 //Beginn - Termin zum schreiben
786 DefaultTableCellRenderer farbrenderer = new DefaultTableCellRenderer();
787 farbrenderer.setForeground(Color.BLUE);
788 farbrenderer.setHorizontalAlignment(JLabel.CENTER);
789 jxSucheTable.getColumn(6).setMinWidth(40);
790 jxSucheTable.getColumn(6).setMaxWidth(40);
791 jxSucheTable.getColumn(6).setCellRenderer(farbrenderer);
792 ((TableColumnExt)jxSucheTable.getColumn(6)).setCellEditor((TableCellEditor) new ZeitTableCellEditor());
793 //Dauer - Termin zum schreiben
794 jxSucheTable.getColumn(7).setMinWidth(35);
795 jxSucheTable.getColumn(7).setMaxWidth(35);
796 jxSucheTable.getColumn(7).setCellRenderer(farbrenderer);
797 ((TableColumnExt)jxSucheTable.getColumn(7)).setCellEditor((TableCellEditor) new ZahlTableCellEditor());
798 //Name
799 jxSucheTable.getColumn(8).setMinWidth(80);
800 //Rezeptnummer
801 jxSucheTable.getColumn(9).setMinWidth(55);
802 jxSucheTable.getColumn(9).setMaxWidth(80);
803 //Behandler
804 jxSucheTable.getColumn(10).setCellRenderer(new ToolTipRenderer(new Color(204,255,255)));
805 jxSucheTable.getColumn(10).setMinWidth(65);
806 jxSucheTable.getColumn(10).setMaxWidth(65);
807 //jxSucheTable.getColumn(10).setCellRenderer( new ToolTipRenderer());
808 //Druckzeit
809 jxSucheTable.getColumn(11).setMinWidth(45);
810 jxSucheTable.getColumn(11).setMaxWidth(45);
811 jxSucheTable.getColumn(11).setCellRenderer(crenderer);
812 ((TableColumnExt)jxSucheTable.getColumn(11)).setCellEditor((TableCellEditor) new ZeitCancelCellEditor());
813 // Ãœbrige daten sind versteckt
814 jxSucheTable.getColumn(12).setMinWidth(0);
815 jxSucheTable.getColumn(12).setMaxWidth(0);
816 jxSucheTable.getColumn(13).setMinWidth(0);
817 jxSucheTable.getColumn(13).setMaxWidth(0);
818 jxSucheTable.getColumn(14).setMinWidth(0);
819 jxSucheTable.getColumn(14).setMaxWidth(0);
820 jxSucheTable.getColumn(15).setMinWidth(0);
821 jxSucheTable.getColumn(15).setMaxWidth(0);
822 jxSucheTable.getColumn(16).setMinWidth(0);
823 jxSucheTable.getColumn(16).setMaxWidth(0);
824 jxSucheTable.getColumn(17).setMinWidth(0);
825 jxSucheTable.getColumn(17).setMaxWidth(0);
826 jxSucheTable.getColumn(18).setMinWidth(0);
827 jxSucheTable.getColumn(18).setMaxWidth(0);
828 jxSucheTable.getColumn(19).setMinWidth(0);
829 jxSucheTable.getColumn(19).setMaxWidth(0);
830 jxSucheTable.setColumnControlVisible(false);
832 jxSucheTable.setEditable(true);
833 jxSucheTable.setSortable(false);
834 jxSucheTable.validate();
835 jxSucheTable.setName("RoogleSuche");
838 //jxSucheTable.addTableModelListener(this);
839 /***************************/
840 ptc = new JScrollPane();
841 ptc.setBackground(Color.WHITE);
842 ptc.setViewportBorder(null);
843 ptc.setViewportView(jxSucheTable);
844 ptc.revalidate();
848 builder.add(ptc,cc.xywh(2, 3, 1, 2));
850 return builder.getPanel();
853 /******************************************/
855 private void startCellEditing(JXTable table,int row,int col){
856 final int xrows = row;
857 final int xcols = col;
858 final JXTable xtable = table;
859 SwingUtilities.invokeLater(new Runnable(){
860 public void run(){
861 xtable.setRowSelectionInterval(xrows, xrows);
862 xtable.setColumnSelectionInterval(xcols, xcols);
863 xtable.scrollRowToVisible(xrows);
864 xtable.editCellAt(xrows,xcols );
869 private void ZeigePopupMenuDauer(java.awt.event.MouseEvent me,String dauer){
870 JPopupMenu jPop = getDauerPopupMenu(dauer);
872 jPop.show( me.getComponent(), me.getX(), me.getY() );
875 private void ZeigePopupStartzeit(java.awt.event.MouseEvent me){
876 JPopupMenu jPop = getBehandlungsartLoeschenMenu();
877 jPop.show( me.getComponent(), me.getX(), me.getY() );
881 private JPopupMenu getDauerPopupMenu(String dauer){
882 JPopupMenu jPopupMenu = new JPopupMenu();
883 JMenuItem item = new JMenuItem("alle nachfolgenden Termine auf die Dauer "+dauer+" Minuten setzen, Nachfolgeblock löschen sofern erforderlich ?");
884 item.setActionCommand("dauerneublockdelete");
885 item.addActionListener(this);
886 jPopupMenu.add(item);
887 item = new JMenuItem("alle nachfolgenden Termine auf die Dauer "+dauer+" Minuten setzen, Nachfolgeblock im Original belassen ?");
888 item.setActionCommand("dauerneublocksave");
889 item.addActionListener(this);
890 jPopupMenu.add(item);
891 return jPopupMenu;
896 @Override
897 public void focusGained(FocusEvent arg0) {
898 // TODO Auto-generated method stub
899 startLbl.setText(eltern.zeitraumEdit[0].getText());
900 stopLbl.setText(eltern.zeitraumEdit[1].getText());
903 @Override
904 public void focusLost(FocusEvent arg0) {
905 // TODO Auto-generated method stub
910 @Override
911 public void actionPerformed(ActionEvent arg0) {
912 // TODO Auto-generated method stub
913 String name = arg0.getActionCommand();
914 if(name.equals("")){return;}
915 for(int i = 0;i<1;i++){
917 if(name.equals("sstart")){
918 knopfGedoense(new int[] {0,1,0,0,0,0,0,0,0,0});
919 roogleStarten();
920 sucheStoppen.requestFocus();
921 break;
923 if(name.equals("sstop")){
924 knopfGedoense(new int[] {0,0,1,0,0,0,0,1,1,1});
925 roogleStoppen();
926 break;
928 if(name.equals("zuruecksetzen")){
929 new SwingWorker<Void,Void>(){
931 @Override
932 protected Void doInBackground() throws Exception {
933 knopfGedoense(new int[] {1,0,0,0,0,0,0,0,0,0});
934 roogleZuruecksetzen();
935 nachfolgerloeschen = false;
936 return null;
939 }.execute();
940 //Runtime r = Runtime.getRuntime();
941 //r.gc();
942 break;
944 if(name.equals("alles markieren")){
945 allesMark(true);
946 break;
948 if(name.equals("alles entmarkieren")){
949 allesMark(false);
950 break;
952 if(name.equals("uebernahme")){
953 if(gewaehlt==0){
954 JOptionPane.showMessageDialog(null,"So so...,Sie haben zwar nix gewählt wollen es aber schon mal übernehmen - das NIX....\nOh Herr schmeiß Hirn ra!");
955 return;
957 if((((String)jxSucheTable.getValueAt(0, 8)).trim().equals("")) && (((String)jxSucheTable.getValueAt(0, 9)).trim().equals("")) &&
958 (schreibeName.getText().trim().equals("")) && (schreibeNummer.getText().trim().equals("")) ){
959 JOptionPane.showMessageDialog(null,"So so...,Sie suchen 'freie Termine' und wollen diese dann mit 'freien Terminen' überschreiben...\nOh Herr schmeiß Hirn ra!");
960 return;
963 SwingUtilities.invokeLater(new Runnable(){
964 public void run(){
965 SchreibeAuswahl sa = new SchreibeAuswahl();
966 sa.execute();
967 knopfGedoense(new int[] {0,0,0,0,1,1,1,0,0,1});
968 //auswahlSchreiben();
970 });
971 break;
973 if(name.equals("drucken")){
974 if(gewaehlt==0){
975 JOptionPane.showMessageDialog(null,"So so...,Sie haben zwar nix gewählt wollen es aber schon mal drucken - das NIX....\nOh Herr schmeiß Hirn ra!");
976 return;
978 cursorWait(true);
979 SwingUtilities.invokeLater(new Runnable(){
980 public void run(){
981 new Thread(){
982 public void run(){
983 auswahlDrucken(true);
985 }.start();
987 //auswahlSchreiben();
989 });
990 break;
992 if(name.equals("nurdrucken")){
993 if(gewaehlt==0){
994 JOptionPane.showMessageDialog(null,"So so...,Sie haben zwar nix gewählt wollen es aber schon mal drucken - das NIX....\nOh Herr schmeiß Hirn ra!");
995 return;
997 String fragestring = "Achtung Sie schreiben keinerlei Daten in den Kalender!!!!!!\n"+
998 "Sie erstellen lediglich einen Ausdruck Ihrer derzeitigen Auswahl\n\n"+
999 "Wollen Sie den Vorgang fortsetzen ?";
1000 int anfrage = JOptionPane.showConfirmDialog(null, fragestring, "Achtung wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
1001 if(anfrage == JOptionPane.NO_OPTION){
1002 sucheWeiter.setEnabled(false);
1003 return;
1005 cursorWait(true);
1006 SwingUtilities.invokeLater(new Runnable(){
1007 public void run(){
1008 new Thread(){
1009 public void run(){
1010 //26.09.2015 /st.
1011 druckVectorInit();
1012 auswahlDrucken(true);
1014 }.start();
1016 });
1017 break;
1020 if(name.equals("email")){
1021 if(gewaehlt==0){
1022 JOptionPane.showMessageDialog(null,"So so...,Sie haben zwar nix gewählt wollen es aber schon mal drucken - das NIX....\nOh Herr schmeiß Hirn ra!");
1023 return;
1025 if(vecWahl.size()==0){
1026 String fragestring = "Achtung Sie schreiben keinerlei Daten in den Kalender!!!!!!\n"+
1027 "Sie erstellen lediglich einen PDF-Terminplan für den Emailversand mit Ihrer derzeitigen Auswahl\n\n"+
1028 "Wollen Sie den Vorgang fortsetzen ?";
1029 int anfrage = JOptionPane.showConfirmDialog(null, fragestring, "Achtung wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
1030 if(anfrage == JOptionPane.NO_OPTION){
1031 sucheWeiter.setEnabled(false);
1032 return;
1034 try{
1035 druckVectorInit();
1036 }catch(Exception ex){
1037 JOptionPane.showMessageDialog(null,"Fehler bei der Aufbereitung des Druckvectors für Email");
1040 cursorWait(true);
1041 SwingUtilities.invokeLater(new Runnable(){
1042 public void run(){
1043 new Thread(){
1044 public void run(){
1045 auswahlDrucken(false);
1047 }.start();
1049 //auswahlSchreiben();
1051 });
1052 break;
1054 if(name.equals("export")){
1055 if(gewaehlt==0){
1056 JOptionPane.showMessageDialog(null,"So so...,Sie haben zwar nix gewählt wollen es aber schon mal exportieren - das NIX....\nOh Herr schmeiß Hirn ra!");
1057 return;
1059 cursorWait(true);
1060 SwingUtilities.invokeLater(new Runnable(){
1061 public void run(){
1062 new Thread(){
1063 public void run(){
1064 auswahlExportieren();
1066 }.start();
1068 //auswahlSchreiben();
1070 });
1071 break;
1074 if(name.equals("dauerneublockdelete")){
1075 setzeNeueDauer();
1076 this.nachfolgerloeschen = true;
1078 if(name.equals("dauerneublocksave")){
1079 setzeNeueDauer();
1080 this.nachfolgerloeschen = false;
1084 private void setzeNeueDauer(){
1085 int start = jxSucheTable.getSelectedRow();
1086 int ende = jxSucheTable.getRowCount();
1087 if(start < 0 || ende == 0){
1088 return;
1090 String dauer = jxSucheTable.getValueAt(start, 7).toString();
1091 for(int i = (start+1); i < ende; i++){
1092 if( (Boolean) jxSucheTable.getValueAt(i, 0)){
1093 jxSucheTable.setValueAt((String)dauer, i, 7);
1097 private void knopfGedoense(int[] knopf){
1098 while(sucheStarten==null){
1099 try {
1100 Thread.sleep(10);
1101 } catch (InterruptedException e) {
1102 // TODO Auto-generated catch block
1103 e.printStackTrace();
1106 sucheStarten.setEnabled((knopf[0]==1 ? true : false));
1107 sucheStoppen.setEnabled((knopf[1]==1 ? true : false));
1108 sucheWeiter.setEnabled((knopf[2]==1 ? true : false));
1109 if(!Rechte.hatRecht(Rechte.Rugl_write, false)){
1110 auswahlUebernahme.setEnabled(false);
1111 }else{
1112 auswahlUebernahme.setEnabled((knopf[3]==1 ? true : false));
1114 auswahlDrucken.setEnabled((knopf[4]==1 ? true : false));
1115 auswahlPerEmail.setEnabled((knopf[5]==1 ? true : false));
1116 auswahlInDatei.setEnabled((knopf[6]==1 ? true : false));
1117 allesMarkieren.setEnabled((knopf[7]==1 ? true : false));
1118 allesEntmarkieren.setEnabled((knopf[8]==1 ? true : false));
1119 allesZuruecksetzen.setEnabled((knopf[9]==1 ? true : false));
1121 public void setKnopfGedoense(int[] knopf){
1122 knopfGedoense(knopf);
1124 private void roogleStarten(){
1125 listenerAusschalten();
1126 this.zeilengewaehlt = 0;
1127 setzeZeilenAusgewaehlt(this.zeilengewaehlt);
1128 EntsperreSatz es = new EntsperreSatz();
1129 es.setzeEltern(getInstance());
1130 es.start();
1131 SwingUtilities.invokeLater(new Runnable(){
1132 public void run(){
1133 aktLblLegende.setText("Aktuelles Datum:");
1134 aktLbl.setText(getStartDatum());
1135 mussUnterbrechen = false;
1137 sucheStoppen.setEnabled(true);
1138 sucheStarten.setEnabled(false);
1139 dtblm.getDataVector().clear();
1140 sucheDaten.clear();
1141 sucheDaten.trimToSize();
1143 jxSucheTable.clearSelection();
1144 jxSucheTable.setSelectionMode(0);
1145 tabelleAusschalten();
1146 jxSucheTable.repaint();
1150 try {
1151 Reha.thisClass.conn.setAutoCommit(true);
1152 } catch (SQLException e) {
1153 // TODO Auto-generated catch block
1154 e.printStackTrace();
1157 WorkerSuchenInKalenderTagen WsIT = new WorkerSuchenInKalenderTagen();
1158 WsIT.setzeStatement(getInstance());
1159 WsIT.execute();
1162 SwingUtilities.invokeLater(new Runnable(){
1163 public void run(){
1164 getInstance().workerfertig = false;
1166 WorkerTabelle2 wt = new WorkerTabelle2();
1167 wt.init();
1168 wt.execute();
1174 /* bislang o.k.
1175 new Thread(){
1176 public void run(){
1177 SuchenSeite.getInstance().workerfertig = false;
1178 SuchenSeite.getInstance().wt = new WorkerTabelle();
1179 SuchenSeite.getInstance().wt.init();
1180 SuchenSeite.getInstance().wt.execute();
1182 }.start();
1187 sucheStoppen.requestFocus();
1192 private void roogleStoppen(){
1193 sucheStoppen.setEnabled(false);
1194 sucheStarten.setEnabled(true);
1195 SwingUtilities.invokeLater(new Runnable(){
1196 public void run(){
1197 new Thread(){
1198 public void run(){
1199 mussUnterbrechen = true;
1200 jxSucheTable.setRowSelectionAllowed(true);
1201 setFortschrittZeigen(false);
1203 }.start();
1204 }});
1206 private void roogleZuruecksetzen(){
1207 mussUnterbrechen = true;
1209 if(trefferLbl.getText().equals(verarbeitetLbl.getText())){
1210 verarbeitetLbl.setText("0");
1211 }else{
1212 JOptionPane.showMessageDialog(null, "Die Verarbeitung des Suchergebnisses ist noch nicht beendet....");
1213 return;
1216 aktLblLegende.setText(" ");
1217 aktLbl.setText(" ");
1218 dtblm.getDataVector().clear();
1219 dtblm.getDataVector().trimToSize();
1220 dtblm.setRowCount(0);
1221 jxSucheTable.removeAll();
1222 sucheDaten.clear();
1223 sucheDaten.trimToSize();
1224 jxSucheTable.clearSelection();
1225 jxSucheTable.validate();
1226 jxSucheTable.repaint();
1227 EntsperreSatz es = new EntsperreSatz();
1228 es.setzeEltern(getInstance());
1229 es.start();
1230 trefferLbl.setText("0");
1231 ausgewaehltLbl.setText("0");
1232 verarbeitetLbl.setText("0");
1233 vecWahl.clear();
1234 vecWahl.trimToSize();
1235 this.zeilengewaehlt = 0;
1236 sucheName.requestFocus();
1238 private void auswahlExportieren(){
1239 JRtaTextField exportart = new JRtaTextField("nix",false);
1240 ExportWahl exwahl = new ExportWahl(auswahlInDatei.getLocationOnScreen(),exportart,"Was soll exportiert werden?");
1241 exwahl.setVisible(true);
1242 if(exportart.getText().equals("rehaplan")){
1243 if(rehaplanExport());
1244 JOptionPane.showMessageDialog(null, "Plandateien wurden erfolgreich exportiert");
1245 }else if(exportart.getText().equals("fahrdienstliste")){
1246 if(fahrdienstExport());
1247 JOptionPane.showMessageDialog(null, "Daten für Fahrdienstliste wurden erfolgreich exportiert");
1248 }else if(exportart.getText().equals("ical")){
1249 if(icalExport()){
1250 JOptionPane.showMessageDialog(null, "Daten für iCal wurden exportiert und per Email versendet");
1252 }else if(exportart.getText().equals("icalreha")){
1253 if(icalRehaExport()){
1254 JOptionPane.showMessageDialog(null, "Daten für Reha-iCal wurden exportiert und per Email versendet");
1257 cursorWait(false);
1260 /********
1264 public static boolean icalRehaExport(){
1265 Vector<Vector<String>> icalVec = new Vector<Vector<String>>();
1266 Vector<String> icalDummy = new Vector<String>();
1267 String emailaddy = "";
1268 String emaildummy = "";
1269 boolean datewarning = true;
1270 return false;
1272 /********
1276 * @return
1279 private boolean icalExport(){
1280 try{
1281 exportVectorInit();
1282 int lang = vecWahl.size();
1283 if(lang <=0){
1284 JOptionPane.showMessageDialog(null, "Keine Termine zum iCal-Export und Versand ausgewählt");
1285 return false;
1288 Vector<Vector<String>> icalVec = new Vector<Vector<String>>();
1289 Vector<String> icalDummy = new Vector<String>();
1290 String emailaddy = "";
1291 String emaildummy = "";
1292 boolean datewarning = true;
1293 String stmt = "select t2.emaila from pat5 as t2 join verordn as t1 on (t2.pat_intern = t1.pat_intern) where t1.rez_nr = '";
1294 List x0diszis = Arrays.asList(new String[] {"KG","MA","ER","LO","RH","PO","FT","RS"});
1295 List x1diszis = Arrays.asList(new String[] {"Physiotherapie","Massage/LD","Ergotherapie","Logopädie","Reha","Podologie","Funktionstraining","Rehasport"});
1296 String xtitel;
1297 int xindex;
1298 int xpos;
1299 //macheVevent(String datum, String start, String end, String titel, String beschreibung){
1300 for(int i = 0; i < lang;i++){
1301 icalDummy.clear();
1302 icalDummy.add( ((String)((Vector<Object>)vecWahl.get(i)).get(15)).replace("-", "") );
1303 icalDummy.add( ((String)((Vector<Object>)vecWahl.get(i)).get(3)).replace(":", "")+"00" );
1304 icalDummy.add( ((String)((Vector<Object>)vecWahl.get(i)).get(4)).replace(":", "")+"00" );
1305 if( (xtitel=((String)((Vector<Object>)vecWahl.get(i)).get(9))).length() >= 2){
1306 if( (xindex=x0diszis.indexOf((String)xtitel.substring(0,2))) < 0 ){
1307 icalDummy.add("Therapie-Termin");
1308 }else{
1309 icalDummy.add((String)x1diszis.get(xindex));
1311 }else{
1312 icalDummy.add("Therapie-Termin");
1314 if(emailaddy.equals("") && !xtitel.equals("")){
1315 xpos = xtitel.indexOf("\\");
1316 if(xpos < 0){
1317 emailaddy = SqlInfo.holeEinzelFeld(stmt+xtitel+"' LIMIT 1");
1318 //System.out.println(emailaddy);
1319 }else{
1320 emailaddy = SqlInfo.holeEinzelFeld(stmt+xtitel.substring(0,xpos)+"' LIMIT 1");
1321 //System.out.println(emailaddy);
1324 icalDummy.add(((String)SystemConfig.hmIcalSettings.get("beschreibung")).replace("\n","CRLF"));
1325 //"Hinweise:CRLF-Bitte bringen Sie für Physio und Massage ein Handtuch mitCRLF-Terminabsagen sind nur bis 24 Stunden vor dem Termin möglichCRLFdanach müssen wir Ihnen den Termin in Rechnung stellenCRLF-Bitte denken Sie an die Bezahlung der Rezeptgebühren, sofern SieCRLFrezeptgebührpflichtig sind"
1326 icalVec.add((Vector)icalDummy.clone());
1328 if(emailaddy.equals("")){
1329 if(schreibeNummer.getText().trim().length() > 2){
1330 String schreibereznr = (schreibeNummer.getText().indexOf("\\") < 0 ? schreibeNummer.getText() : schreibeNummer.getText().substring(0,schreibeNummer.getText().indexOf("\\") ) );
1331 emailaddy = SqlInfo.holeEinzelFeld(stmt+schreibereznr+"' LIMIT 1");
1334 /*****************************/
1335 JTextField tField = new JTextField(25);
1336 tField.setText(emailaddy);
1337 JCheckBox cField = new JCheckBox("mit Benachrichtigung vor dem Termin");
1338 cField.setSelected((Boolean) SystemConfig.hmIcalSettings.get("warnen"));
1339 JPanel myPanel = new JPanel();
1340 FormLayout fm = new FormLayout("5dlu,p,5dlu,p:g,5dlu","5dlu,p,5dlu,p,2dlu,p,15dlu");
1341 CellConstraints cc = new CellConstraints();
1342 myPanel.setLayout(fm);
1343 myPanel.add(new JLabel("Emailadresse:"),cc.xy(2, 2));
1344 myPanel.add(tField, cc.xy(4,2));
1345 //myPanel.add(new JLabel("Benachrichtigung:"),cc.xy(4,2));
1346 myPanel.add(cField,cc.xy(4,4));
1347 int result = JOptionPane.showConfirmDialog(null, myPanel,"Bitte Eingaben überprüfen", JOptionPane.OK_CANCEL_OPTION);
1348 if(result == JOptionPane.OK_OPTION){
1349 emailaddy = tField.getText();
1350 datewarning = cField.isSelected();
1351 }else{
1352 return false;
1355 /*****************************/
1356 StringBuffer buf = new StringBuffer();
1357 buf.append(ICalGenerator.macheKopf());
1358 for(int i = 0;i<icalVec.size();i++){
1359 buf.append(ICalGenerator.macheVevent(icalVec.get(i).get(0), icalVec.get(i).get(1), icalVec.get(i).get(2), icalVec.get(i).get(3), icalVec.get(i).get(4),datewarning));
1361 buf.append(ICalGenerator.macheEnd());
1362 FileOutputStream outputFile = new FileOutputStream(Reha.proghome+"temp/"+Reha.aktIK+"/TherapieTermine.ics");
1363 //OutputStreamWriter out = new OutputStreamWriter(outputFile, "ISO-8859-1");
1364 OutputStreamWriter out = new OutputStreamWriter(outputFile, "UTF8");
1365 BufferedWriter bw = null;
1366 String drzeit = "";
1367 bw = new BufferedWriter(out);
1368 bw.write(buf.toString());
1369 bw.flush();
1370 bw.close();
1371 out.close();
1372 outputFile.close();
1377 //emailaddy = JOptionPane.showInputDialog(null,"Diese Email-Adresse verwenden:" , emailaddy);
1378 try{
1379 if(emailaddy.equals("")){
1380 return false;
1382 }catch(java.lang.NullPointerException ex){
1383 return false;
1385 String smtphost = SystemConfig.hmEmailExtern.get("SmtpHost");
1386 String authent = SystemConfig.hmEmailExtern.get("SmtpAuth");
1387 String benutzer = SystemConfig.hmEmailExtern.get("Username") ;
1388 String pass1 = SystemConfig.hmEmailExtern.get("Password");
1389 String sender = SystemConfig.hmEmailExtern.get("SenderAdresse");
1390 String secure = SystemConfig.hmEmailExtern.get("SmtpSecure");
1391 String useport = SystemConfig.hmEmailExtern.get("SmtpPort");
1392 //String recipient = "m.schuchmann@rta.de"+","+SystemConfig.hmEmailExtern.get("SenderAdresse");
1393 String recipient = emailaddy+((Boolean) SystemConfig.hmIcalSettings.get("aufeigeneemail") ? ","+SystemConfig.hmEmailExtern.get("SenderAdresse") : "");
1394 //String text = "Ihre Behandlungstermine befinden sich im Dateianhang";
1395 boolean authx = (authent.equals("0") ? false : true);
1396 boolean bestaetigen = false;
1397 String[] aufDat = {Reha.proghome+"temp/"+Reha.aktIK+"/TherapieTermine.ics","TherapieTermine.ics"};
1398 ArrayList<String[]> attachments = new ArrayList<String[]>();
1399 attachments.add(aufDat);
1400 EmailSendenExtern oMail = new EmailSendenExtern();
1401 try{
1402 oMail.sendMail(smtphost, benutzer, pass1, sender, recipient, (String)SystemConfig.hmIcalSettings.get("betreff"),
1403 (String) SystemConfig.hmIcalSettings.get("emailtext"),attachments,authx,bestaetigen,secure,useport);
1404 oMail = null;
1405 }catch(Exception e){
1406 e.printStackTrace( );
1407 JOptionPane.showMessageDialog(null, "Emailversand fehlgeschlagen\n\n"+
1408 "Mögliche Ursachen:\n"+
1409 "- falsche Angaben zu Ihrem Emailpostfach und/oder dem Provider\n"+
1410 "- Sie haben keinen Kontakt zum Internet"+"\n\nFehlertext:"+e.getLocalizedMessage());
1411 return false;
1413 return true;
1415 }catch(Exception ex){
1416 JOptionPane.showMessageDialog(null, "Fehler beim iCal-Export und Versand");
1418 return false;
1420 /*****
1425 * @return
1427 private boolean fahrdienstExport(){
1428 try{
1429 exportVectorInit();
1430 int lang = vecWahl.size();
1431 if(lang <=0){
1432 JOptionPane.showMessageDialog(null, "Keine Termine zum Exportieren in die Fahrdienstliste ausgewählt");
1433 return false;
1435 //Druckzeit sofern vorhanden in offizielle Druckzeit übertragen
1436 for(int i = 0; i < lang;i++){
1437 if(! ((String)((Vector<Object>)vecWahl.get(i)).get(11)).trim().equals("")){
1438 ((Vector<Object>)vecWahl.get(i)).set(6,(String) ((Vector<Object>)vecWahl.get(i)).get(11));
1441 @SuppressWarnings("rawtypes")
1442 Comparator<Vector> comparator = new Comparator<Vector>() {
1443 @Override
1444 public int compare(Vector o1, Vector o2) {
1445 String s1 = ((String)o1.get(15))+"/"+((String)o1.get(8)).replace("KGG-", "")+"/"+((String)o1.get(6));
1446 String s2 = ((String)o2.get(15))+"/"+((String)o2.get(8)).replace("KGG-", "")+"/"+((String)o2.get(6));
1447 ////System.out.println("Ergebnis der Sortierung = "+s1.compareTo(s2)+" S1="+s1+" / S2="+s2);
1448 return s1.compareTo(s2);
1451 Collections.sort(vecWahl,comparator);
1452 FileOutputStream outputFile = new FileOutputStream(SystemConfig.hmVerzeichnisse.get("Fahrdienstrohdatei")+"FPSort.txt");
1453 OutputStreamWriter out = new OutputStreamWriter(outputFile, "ISO-8859-1");
1454 BufferedWriter bw = null;
1455 String drzeit = "";
1456 bw = new BufferedWriter(out);
1457 //bw = new BufferedWriter(new FileWriter(SystemConfig.hmVerzeichnisse.get("Fahrdienstrohdatei")+"FPSort.txt"));
1458 for(int i = 0; i < lang;i++){
1459 if( ((Boolean)((Vector<Object>)vecWahl.get(i)).get(19)) ){
1460 //dauer holen
1461 drzeit = getGruppendauer( ((String) ((Vector<Object>)vecWahl.get(i)).get(8)) );
1462 }else{
1463 drzeit = getGruppendauer( ((String) ((Vector<Object>)vecWahl.get(i)).get(5)) );
1465 bw.write( ((String) ((Vector<Object>)vecWahl.get(i)).get(15))+"°"+((String)((Vector<Object>)vecWahl.get(i)).get(6))+
1466 "°"+(String)((Vector<Object>)vecWahl.get(i)).get(10)+"°"+((String)((Vector<Object>)vecWahl.get(i)).get(8)).replace("KGG-", "")+
1467 "°"+(String)((Vector<Object>)vecWahl.get(i)).get(9)+"°"+drzeit
1469 bw.newLine();
1471 bw.flush();
1472 bw.close();
1473 out.close();
1474 outputFile.close();
1475 new LadeProg(Reha.proghome+"FahrdienstExporter.jar " +
1476 Reha.proghome+"ini/"+Reha.aktIK+"/rehajava.ini");
1477 }catch(Exception ex){
1478 ex.printStackTrace();
1479 cursorWait(false);
1480 return false;
1483 cursorWait(false);
1484 return true;
1486 private boolean rehaplanExport(){
1487 exportVectorInit();
1488 int lang = vecWahl.size();
1489 if(lang <=0){
1490 JOptionPane.showMessageDialog(null, "Keine Termine zum Exportieren nach RehaPlaner ausgewählt");
1491 return false;
1493 if(sucheName.getText().trim().equals("")){
1494 JOptionPane.showMessageDialog(null, "Kein Name für die Exportdatei vorhanden (Suchefeld=leer)"+
1495 "\n\nExport in Plandatei nicht möglich\n\n");
1496 return false;
1499 //Druckzeit sofern vorhanden in offizielle Druckzeit übertragen
1500 for(int i = 0; i < lang;i++){
1501 if(! ((String) ((Vector<Object>)vecWahl.get(i)).get(11)).trim().equals("")){
1502 ((Vector<Object>)vecWahl.get(i)).set(6, ((String)((Vector<Object>)vecWahl.get(i)).get(11)) );
1505 @SuppressWarnings("rawtypes")
1506 Comparator<Vector> comparator = new Comparator<Vector>() {
1507 @Override
1508 public int compare(Vector o1, Vector o2) {
1509 String s1 = ((String)o1.get(15))+((String)o1.get(6));
1510 String s2 = ((String)o2.get(15))+((String)o2.get(6));
1511 return s1.compareTo(s2);
1514 Collections.sort(vecWahl,comparator);
1515 ////System.out.println(vecWahl);
1516 String drzeit = "";
1517 String gruppe = "";
1518 int kalzeile = -1;
1519 int kollege = -1;
1520 String zeile = "";
1522 try {
1523 FileOutputStream outputFile = new FileOutputStream(SystemConfig.hmVerzeichnisse.get("Rehaplaner")+sucheName.getText().trim()+".txt");
1524 OutputStreamWriter out = new OutputStreamWriter(outputFile, "ISO-8859-1");
1525 BufferedWriter bw = null;
1526 bw = new BufferedWriter(out);
1528 for(int i = 0; i < lang;i++){
1529 //Wenn Gruppensignal gesetzt
1530 if( ((Boolean) ((Vector<Object>)vecWahl.get(i)).get(19)) ){
1531 //dauer holen
1532 drzeit = getGruppendauer( ((String) ((Vector<Object>)vecWahl.get(i)).get(8)) );
1533 }else{
1534 drzeit = getGruppendauer( ((String) ((Vector<Object>)vecWahl.get(i)).get(5)) );
1536 //Jetzt die gruppenzugehörigkeit holen
1537 try{
1538 kalzeile = Integer.parseInt( ((String)((Vector<Object>)vecWahl.get(i)).get(13)).substring(0,2));
1539 gruppe = ParameterLaden.searchAbteilung(kalzeile);
1540 ////System.out.println(((Vector<String>)vecWahl.get(i)).get(6)+"/"+((Vector<String>)vecWahl.get(i)).get(10));
1541 }catch(Exception ex){
1542 ex.printStackTrace();
1544 // Datum auf deutsch Anfangszeit(=Druckzeit)
1545 bw.write( ((String)((Vector<Object>)vecWahl.get(i)).get(14))+"°"+((String)((Vector<Object>)vecWahl.get(i)).get(6))+
1546 // ermittelte Dauer Gruppenkürzel
1547 "°"+drzeit+"°"+(gruppe.trim().equals("") ? "--" : gruppe)+"°"+
1548 // Matchcode Kalenderbenutzer
1549 ((String)((Vector<Object>)vecWahl.get(i)).get(10))+"°"+
1551 ((String)((Vector<Object>)vecWahl.get(i)).get(8)).replaceFirst("\\\\", "").replace("\\", "/Gruppe:_")
1554 bw.newLine();
1556 bw.flush();
1557 bw.close();
1558 out.close();
1559 outputFile.close();
1560 } catch (IOException e) {
1561 e.printStackTrace();
1562 cursorWait(false);
1563 return false;
1565 cursorWait(false);
1566 return true;
1568 private String getGruppendauer(String zeit){
1569 String sret = "30";
1570 int lastline = zeit.lastIndexOf("-");
1571 String nurmin = zeit.substring(lastline+1);
1572 sret = nurmin.split("Min.")[0];
1573 return sret;
1576 private void auswahlDrucken(boolean drucken){
1577 int lang,i;
1578 TermObjekt termin = null;
1579 Vector<TermObjekt> vec = new Vector<TermObjekt>();
1580 if(gewaehlt > 0){
1581 lang = vecWahl.size();
1582 if(lang==0){
1583 JOptionPane.showMessageDialog(null,"Sie haben die Auswahl nicht in den Terminplan übernommen!\n"+
1584 "Ohne die vorherige Ãœbernahme kann weder ein Ausdruck noch eine Email erstellt werden.");
1585 cursorWait(false);
1586 return;
1588 int minpos = 0;
1589 for(i=0;i<lang;i++){
1590 boolean isdruckzeit = ( ((String)((Vector<Object>)vecWahl.get(i)).get(11)).trim().equals("")
1591 ? false
1592 : true );
1593 String druckzeit = ( isdruckzeit
1594 ? ((String)((Vector<Object>)vecWahl.get(i)).get(11))
1595 : ((String)((Vector<Object>)vecWahl.get(i)).get(6)) );
1596 String sorter = ((String)((Vector<Object>)vecWahl.get(i)).get(15))+ druckzeit;
1597 String tag = ((String)((Vector<Object>)vecWahl.get(i)).get(2));
1598 String termtext = null;
1600 String termtext = (isdruckzeit
1601 ?((String)((Vector)vecWahl.get(i)).get(8))
1602 :((String)((Vector)vecWahl.get(i)).get(10)) );
1605 if(isdruckzeit && ((String)((Vector<Object>)vecWahl.get(i)).get(12)).trim().equals("")){
1606 if(((String)((Vector<Object>)vecWahl.get(i)).get(8)).contains("\\\\")){
1607 //System.out.println(((Vector)vecWahl.get(i)).get(8));
1608 termtext = ((String)((Vector<Object>)vecWahl.get(i)).get(8)).substring(7);
1609 if(termtext.contains("BWB")){
1610 termtext = ((String)((Vector<Object>)vecWahl.get(i)).get(10));
1611 }else{
1612 if(termtext.contains("Min.")){
1613 minpos = termtext.lastIndexOf("-");
1614 termtext = termtext.substring(0,minpos);
1619 if(termtext.contains("Gruppe:_")){
1620 termtext = termtext.substring(8);
1621 System.out.println("in variante 1= "+termtext);
1622 }else{
1623 termtext = ((String)((Vector)vecWahl.get(i)).get(10)); // neu eingef�gt am 06.04.2009
1624 System.out.println("in variante 2= "+termtext);
1627 //System.out.println("in variante 2= "+termtext);
1629 }else{
1631 termtext = ((String)((Vector<Object>)vecWahl.get(i)).get(8));
1632 if(termtext.contains("Gruppe:_")){
1633 termtext = termtext.substring(8);
1634 }else{
1635 termtext = ((String)((Vector<Object>)vecWahl.get(i)).get(10)); // neu eingef�gt am 06.04.2009
1639 }else{
1640 termtext = ((String)((Vector<Object>)vecWahl.get(i)).get(10));
1642 //erweitert um die Dauer;
1643 vec.add(new TermObjekt(tag,druckzeit,termtext,sorter,((String)((Vector<Object>)vecWahl.get(i)).get(5))));
1648 Collections.sort(vec);
1649 new TerminplanDrucken().init((Vector<TermObjekt>)vec, drucken,schreibeName.getText().trim(),schreibeNummer.getText().trim(),getInstance());
1653 @Override
1654 public void tableChanged(TableModelEvent arg0) {
1655 if(arg0.getType() == TableModelEvent.INSERT){
1656 ////System.out.println("Tabellen-Zeile eingefügt");
1658 if(arg0.getType() == TableModelEvent.UPDATE){
1660 if(jxSucheTable.isEditable()){
1661 if(arg0.getColumn() == 0){
1662 String sym = ((ImageIcon)jxSucheTable.getValueAt(arg0.getFirstRow(),1)).getDescription();
1663 if(sym.equals("gesperrt") && ((Boolean)jxSucheTable.getValueAt(arg0.getFirstRow(),0)) ){
1664 jxSucheTable.setValueAt(Boolean.valueOf(false),arg0.getFirstRow(),0);
1665 }else if(!sym.equals("gesperrt")){
1666 if( ((Boolean)jxSucheTable.getValueAt(arg0.getFirstRow(),0)) ){
1667 this.zeilengewaehlt++;
1668 setzeZeilenAusgewaehlt(this.zeilengewaehlt);
1669 if(this.zeilengewaehlt==1){
1670 if(!Rechte.hatRecht(Rechte.Rugl_write, false)){
1671 auswahlUebernahme.setEnabled(false);
1672 }else{
1673 auswahlUebernahme.setEnabled(true);
1675 auswahlDrucken.setEnabled(true);
1676 auswahlPerEmail.setEnabled(true);
1677 auswahlInDatei.setEnabled(true);
1678 sucheWeiter.setEnabled(true);
1680 }else{
1681 this.zeilengewaehlt--;
1682 setzeZeilenAusgewaehlt(this.zeilengewaehlt);
1683 if(this.zeilengewaehlt==0){
1684 auswahlUebernahme.setEnabled(false);
1685 auswahlDrucken.setEnabled(false);
1686 auswahlPerEmail.setEnabled(false);
1687 auswahlInDatei.setEnabled(false);
1688 sucheWeiter.setEnabled(false);
1693 if(arg0.getColumn() == 11){
1694 if(((String)jxSucheTable.getValueAt(arg0.getFirstRow(), 11)).trim().equals(":")){
1695 jxSucheTable.setValueAt("", arg0.getFirstRow(), 11);
1698 if(arg0.getColumn() == 6){
1699 int test = testeZeiten(arg0.getFirstRow(),arg0.getColumn());
1700 if( test > 0){
1701 if(test==1){
1702 JOptionPane.showMessageDialog(null,"Sie haben versucht den Terminstart von den Beginn des verfügbaren Blockes zu setzen");
1703 jxSucheTable.setValueAt(jxSucheTable.getValueAt(arg0.getFirstRow(),3), arg0.getFirstRow(), 6);
1705 if(test==2){
1706 jxSucheTable.setValueAt(jxSucheTable.getValueAt(arg0.getFirstRow(),3), arg0.getFirstRow(), 6);
1710 // Prüfung einbauen ob Beginnzeit + Dauer nicht Endzeit übersteigt bzw. vor Planbeginnzeit liegt.
1711 //jxSucheTable.setValueAt("", arg0.getFirstRow(), 6);
1713 if(arg0.getColumn() == 7){
1714 if(testeZeiten(arg0.getFirstRow(),arg0.getColumn()) > 0){
1715 jxSucheTable.setValueAt(jxSucheTable.getValueAt(arg0.getFirstRow(),5), arg0.getFirstRow(), 7);
1717 //jxSucheTable.setValueAt("", arg0.getFirstRow(), 7);
1718 // Prüfung einbauen ob Beginnzeit + Dauer nicht Endzeit übersteigt bzw. vor Planbeginnzeit liegt.
1725 private int testeZeiten(int reihe, int zeile){
1726 int ret = 0;
1727 int tkstart,tkende,plstart,pldauer;
1728 tkstart = (int) ZeitFunk.MinutenSeitMitternacht(((String)jxSucheTable.getValueAt(reihe, 3)).trim()+":00");
1729 tkende = (int) ZeitFunk.MinutenSeitMitternacht(((String)jxSucheTable.getValueAt(reihe, 4)).trim()+":00");
1730 plstart = (int) ZeitFunk.MinutenSeitMitternacht(((String)jxSucheTable.getValueAt(reihe, 6)).trim()+":00");
1731 pldauer = Integer.parseInt((String)jxSucheTable.getValueAt(reihe, 7));
1732 if(plstart < tkstart){
1733 return 1;
1735 if((plstart+pldauer) > tkende){
1736 return 2;
1738 if(pldauer==0){
1739 return 3;
1741 return ret;
1743 private void allesMark(boolean mark){
1744 int bis = jxSucheTable.getRowCount(),i;
1745 boolean wert;
1746 this.zeilengewaehlt = 0;
1747 boolean gezeigt = false;
1748 if(mark){
1749 listenerAusschalten();
1750 for(i=0;i<bis;i++){
1751 if(dtblm.getValueAt(i, 1) != null){
1752 if(((ImageIcon)dtblm.getValueAt(i, 1)).getDescription().equals("offen")){
1753 dtblm.setValueAt(Boolean.valueOf(true),i, 0);
1754 this.zeilengewaehlt++;
1758 }else{
1759 if(!gezeigt){
1760 JOptionPane.showMessageDialog(null,"Ein oder mehrere Termine sind noch nicht verifizier \n und können deshalb nicht gewählt werden");
1761 gezeigt = true;
1766 setzeZeilenAusgewaehlt(this.zeilengewaehlt);
1767 listenerEinschalten();
1768 if(!Rechte.hatRecht(Rechte.Rugl_write, false)){
1769 auswahlUebernahme.setEnabled(false);
1770 }else{
1771 auswahlUebernahme.setEnabled(true);
1773 auswahlDrucken.setEnabled(true);
1774 auswahlPerEmail.setEnabled(true);
1775 auswahlInDatei.setEnabled(true);
1776 sucheWeiter.setEnabled(true);
1777 }else{
1778 listenerAusschalten();
1779 for(i=0;i<bis;i++){
1780 dtblm.setValueAt(Boolean.valueOf(false),i, 0);
1782 this.zeilengewaehlt = 0;
1783 setzeZeilenAusgewaehlt(this.zeilengewaehlt);
1784 listenerEinschalten();
1785 auswahlUebernahme.setEnabled(false);
1786 auswahlDrucken.setEnabled(false);
1787 auswahlPerEmail.setEnabled(false);
1788 auswahlInDatei.setEnabled(false);
1789 sucheWeiter.setEnabled(false);
1793 private void druckVectorInit(){
1794 int lang = dtblm.getRowCount(),i;
1795 int durchlauf = 0;
1796 //Vector vec = null;
1797 String name,nummer;
1798 vecWahl.clear();
1800 //name = String.valueOf(schreibeName.getText().trim());
1801 //nummer = String.valueOf(schreibeNummer.getText().trim().replace("\\", "\\\\") );
1802 ////System.out.println("Rezeptnummer = "+nummer);
1804 for(i=0;i<lang;i++){
1806 if((Boolean)dtblm.getValueAt(i,0)){
1808 setFortschrittSetzen(durchlauf++);
1809 vecWahl.add((Vector<Object>)dtblm.getDataVector().get(i));
1810 ((Vector<Object>)vecWahl.get(vecWahl.size()-1)).set(11, (String) dtblm.getValueAt(i,11));
1811 ((Vector<Object>)vecWahl.get(vecWahl.size()-1)).set(6, (String) dtblm.getValueAt(i,6));
1815 private void exportVectorInit(){
1816 int lang = dtblm.getRowCount(),i;
1817 int durchlauf = 0;
1818 //Vector vec = null;
1819 String name,nummer;
1820 vecWahl.clear();
1821 for(i=0;i<lang;i++){
1822 if((Boolean)dtblm.getValueAt(i,0)){
1823 setFortschrittSetzen(durchlauf++);
1824 vecWahl.add( ((Vector<Object>)dtblm.getDataVector().get(i)));
1825 //vecWahl.add( ((Vector<Object>)dtblm.getDataVector().get(i)).clone());
1826 ((Vector<Object>)vecWahl.get(vecWahl.size()-1)).set(11, (String) dtblm.getValueAt(i,11));
1827 ((Vector<Object>)vecWahl.get(vecWahl.size()-1)).set(6, (String) dtblm.getValueAt(i,6));
1832 private void icsExportVectorInit(){
1833 int lang = dtblm.getRowCount(),i;
1834 int durchlauf = 0;
1835 //Vector vec = null;
1836 String name,nummer;
1837 vecWahl.clear();
1838 for(i=0;i<lang;i++){
1839 if((Boolean)dtblm.getValueAt(i,0)){
1840 setFortschrittSetzen(durchlauf++);
1841 vecWahl.add( ((Vector<Object>)dtblm.getDataVector().get(i)));
1842 //vecWahl.add( ((Vector<Object>)dtblm.getDataVector().get(i)).clone());
1843 ((Vector<Object>)vecWahl.get(vecWahl.size()-1)).set(11, (String) dtblm.getValueAt(i,11));
1844 ((Vector<Object>)vecWahl.get(vecWahl.size()-1)).set(6, (String) dtblm.getValueAt(i,6));
1850 /********************************************************/
1851 class SchreibeAuswahl extends SwingWorker<Void,Void>{
1853 @Override
1854 protected Void doInBackground() throws Exception {
1855 //Hier wird gelöscht unbedingt vorher fragen bevor
1856 if( (schreibeName.getText().trim().equals("")) && (schreibeNummer.getText().trim().equals(""))){
1857 int anfrage = JOptionPane.showConfirmDialog(null, "Wollen Sie wirklich die ausgewählten Termine löschen (=freigeben) ?", "Achtung wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
1859 if(anfrage == JOptionPane.NO_OPTION){
1860 setKnopfGedoense(new int[] {0,0,0,1,1,1,1,1,1,1});
1861 return null;
1864 if(anfrage != JOptionPane.YES_OPTION){
1865 setKnopfGedoense(new int[] {0,0,0,1,1,1,1,1,1,1});
1866 return null;
1869 auswahlSchreiben();
1870 if( (schreibeName.getText().trim().equals("")) && (schreibeNummer.getText().trim().equals(""))){
1871 //roogleZuruecksetzen();
1873 // TODO Auto-generated method stub
1874 return null;
1878 private void auswahlSchreiben(){
1879 int lang = dtblm.getRowCount(),i;
1880 int durchlauf = 0;
1881 int tkstart,tkdauer,plstart,pldauer;
1882 Vector<Vector<String>> vec = null;
1883 String name,nummer;
1884 boolean leer = false;
1886 // this.zeilengewaehlt;
1887 setFortschrittRang(0,this.zeilengewaehlt );
1888 setFortschrittSetzen(0);
1889 setFortschrittZeigen(true);
1891 vecWahl.clear();
1893 name = schreibeName.getText().trim();
1894 nummer =schreibeNummer.getText().trim().replace("\\", "\\\\") ;
1895 String meldung = "";
1896 for(i=0;i<lang;i++){
1898 if((Boolean)dtblm.getValueAt(i,0)){
1899 setFortschrittSetzen(durchlauf++);
1900 vecWahl.add( ((Vector<Object>)dtblm.getDataVector().get(i)) );
1901 ((Vector<Object>)vecWahl.get(vecWahl.size()-1)).set(11, (String) dtblm.getValueAt(i,11));
1902 ((Vector<Object>)vecWahl.get(vecWahl.size()-1)).set(6, (String) dtblm.getValueAt(i,6));
1903 tkstart = (int) ZeitFunk.MinutenSeitMitternacht(((String)jxSucheTable.getValueAt(i, 3)).trim()+":00");
1904 tkdauer = Integer.parseInt((String)jxSucheTable.getValueAt(i, 5));
1905 plstart = (int) ZeitFunk.MinutenSeitMitternacht(((String)jxSucheTable.getValueAt(i, 6)).trim()+":00");
1906 pldauer = Integer.parseInt((String)jxSucheTable.getValueAt(i, 7));
1908 // Abgleich der Verfügbaren Dauer mit der gewünschten Termindauer
1909 // (Nur!) wenn es sich um Gruppentermine handelt kann u.U. die verfügbare Dauer
1910 // kürzer sein als die (angeblich) gewünschte Dauer.
1911 // Abfragen ob dem so ist, sofern ja, nachfragen ob die gewünschte Dauer auf die
1912 // tatsächlich verfügbare Dauer gekürzt werden soll.
1913 // Wird ja ausgewählt wird gekürzt, in jedem anderen Fall
1914 // nach oben zum Schleifenanfang, jedenfalls wird dann nichts in den Kalender geschrieben.
1915 if(pldauer > tkdauer){
1916 meldung = "<html>Achtung der Termin vom<br><br><b>"+
1917 jxSucheTable.getValueAt(i, 2).toString()+" - "+
1918 jxSucheTable.getValueAt(i, 3).toString()+" - "+jxSucheTable.getValueAt(i, 10).toString()+
1919 "<br><br></b>muß auf die verfügbare Dauer von<b><font color='#ff0000'> -> "+
1920 Integer.toString(tkdauer)+" Minuten gekürzt <- </font></b>werden"+
1921 "<br><br>wollen Sie das wirklich?</html>";
1922 int frage = JOptionPane.showConfirmDialog(null, meldung,"Achtung wichtige Benutzeranfrage",JOptionPane.YES_NO_OPTION);
1923 if(frage != JOptionPane.YES_OPTION){
1924 continue;
1926 jxSucheTable.setValueAt(Integer.toString(tkdauer),i, 7);
1927 pldauer = tkdauer;
1929 for(int j = 0;j<1;){
1930 if((tkstart==plstart) && (tkdauer==pldauer)){
1931 // Beginn und Dauer sind gleich geblieben
1932 if((name.equals("")) && (nummer.equals(""))){
1933 // Termin wird gelöscht es müssen die Blöcke vorher und nachher getestet werden;
1934 // deshalb zuerst Vector mit dem Tag holen
1935 try {
1936 vec = sucheZeile(i);
1937 schreibeLoeschen(vec,i,name,nummer);
1938 } catch (SQLException e) {
1939 e.printStackTrace();
1941 break;
1942 }else{
1943 // nur Statement bilden und weg damit... kein Vector gedönse
1944 String snum = Integer.toString(((Integer) jxSucheTable.getValueAt(i, 16)));
1945 String stmt = "Update flexkc set T"+snum+"='"+StringTools.EscapedDouble(name)+"', N"+snum+"='"+nummer+"' where id='"+
1946 ((String)jxSucheTable.getValueAt(i, 17)).trim()+"'";
1947 try {
1948 schreibeZeile(stmt);
1949 } catch (SQLException e) {
1950 e.printStackTrace();
1952 break;
1954 }else{
1955 // Zunächst den Vector mit dem Tag holen der immer überprüft werden muß
1956 try {
1957 vec = sucheZeile(i);
1958 } catch (SQLException e) {
1959 e.printStackTrace();
1961 if((name.equals("")) && (nummer.equals(""))){
1962 JOptionPane.showMessageDialog(null,"Das löschen eines Termin und gleichzeitiges verändern der Startzeit \n"+
1963 "bzw. der Termindauer, ist in einem - nicht unerheblich Maß - Schwachsinn!\n"+
1964 "...und deshalb auch in dieser Software-Version nicht vorgesehen");
1965 //schreibeLoeschen(vec,i,name,nummer);
1966 break;
1967 }else{
1968 // Vector ebenfalls untersuchen;
1969 //1. bisheriger Beginn/Dauer/Ende ermitteln
1970 int tkende = (int) ZeitFunk.MinutenSeitMitternacht( ZeitFunk.MinutenZuZeit(tkstart+tkdauer) );
1971 int plende = (int) ZeitFunk.MinutenSeitMitternacht( ZeitFunk.MinutenZuZeit(plstart+pldauer) );
1973 //2. Abfrage ob Beginn später und Ende früher - Mittelblock erforderlich - 2 neue Blöcke!
1974 if((tkstart != plstart) && (tkdauer != pldauer) && (tkende != plende)){
1975 schreibeTermin(vec,i,1,tkstart,tkdauer,tkende,plstart,pldauer,plende,name,nummer);
1976 break;
1978 //3. Abfrage ob Beginn gleich und Ende früher - Nachblock erforderlich - 1 neuer Block!
1979 if((tkstart == plstart) && (tkdauer != pldauer)){
1980 schreibeTermin(vec,i,2,tkstart,tkdauer,tkende,plstart,pldauer,plende,name,nummer);
1981 break;
1983 //4. Abfrage ob Beginn später und Ende gleich - Vorblock erforderlich - 1 neuer Block!
1984 if((tkstart != plstart) && (tkdauer != pldauer) && (tkende==plende)){
1985 schreibeTermin(vec,i,3,tkstart,tkdauer,tkende,plstart,pldauer,plende,name,nummer);
1986 break;
1988 break;
1992 try {
1993 Thread.sleep(5);
1994 } catch (InterruptedException e) {
1995 // TODO Auto-generated catch block
1996 e.printStackTrace();
2000 setFortschrittZeigen(false);
2003 /*****************************************/
2004 private void schreibeTermin(Vector<Vector<String>> vec,int zeile,int art,int tkstart,int tkdauer,int tkende,int plstart,int pldauer,int plende,String name,String nummer){
2006 int vecgross = vec.size();
2007 Vector<Vector<String>> newvec = new Vector<Vector<String>>();
2008 int block = (Integer) jxSucheTable.getValueAt(zeile,16);
2009 int geaendert = Integer.parseInt( (String) jxSucheTable.getValueAt(zeile,18) );
2010 if(vecgross != geaendert ){
2011 ////System.out.println("vermerkt sind "+vecgross+" Blöcke / tatsächlich in der Datenbank sind "+geaendert+" Blöcke");
2012 block += (vecgross-geaendert);
2016 int i;
2017 for(int j = 0; j<1;j++){
2018 if(art==1){
2019 for(i=0;i<vecgross;i++){
2020 if(i<(block-1)){
2021 newvec.add((Vector<String>)vec.get(i));
2022 }else if(i==(block-1)){
2023 newvec.add(vec.get(i));
2024 ((Vector<String>)newvec.get(i)).set(3,Integer.toString(plstart-tkstart));
2025 ((Vector<String>)newvec.get(i)).set(4,ZeitFunk.MinutenZuZeit(tkstart+(plstart-tkstart)));
2026 Vector<String> aktvec = new Vector<String>();
2027 aktvec.add(name);
2028 aktvec.add(nummer);
2029 aktvec.add(ZeitFunk.MinutenZuZeit(plstart));
2030 aktvec.add(Integer.toString(pldauer));
2031 aktvec.add(ZeitFunk.MinutenZuZeit(plstart+pldauer));
2032 newvec.add(aktvec);
2033 Vector<String> nachvec = new Vector<String>();
2034 nachvec.add( ((Vector<String>)vec.get(i)).get(0));
2035 nachvec.add( ((Vector<String>)vec.get(i)).get(1));
2036 nachvec.add( aktvec.get(4));
2037 String planende = (String)jxSucheTable.getValueAt(zeile,4)+":00";
2039 nachvec.add( Integer.toString((int) ZeitFunk.MinutenSeitMitternacht(planende) -
2040 (int)ZeitFunk.MinutenSeitMitternacht((String)nachvec.get(2)) ) ) ;
2041 nachvec.add(planende );
2043 newvec.add(nachvec);
2044 }else if (i>(block-1)){
2045 newvec.add(vec.get(i));
2048 String stmt = macheStat(newvec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2049 ////System.out.println("Mit vor und nachblock "+stmt);
2050 try {
2051 schreibeZeile(stmt);
2052 } catch (SQLException e) {
2053 // TODO Auto-generated catch block
2054 e.printStackTrace();
2056 break;
2058 if(art==2){
2059 //hier muß eingegriffen werden wenn beim Überschreiben mit
2060 //veränderter Dauer der Nachblock gelöscht werden soll
2061 //ebenfalls muß dann überprüft werden ob er übernächste Block ebenfalls ein Leerblock ist
2062 //in dem Fall müßte dann der Leerblock zusammengefaßt werden
2063 //die Blockanzahl bliebe also gleich!!!
2064 for(i=0;i<vecgross;i++){
2065 if(i==(block-1)){
2066 Vector<String> aktvec = new Vector<String>();
2067 aktvec.add(name);
2068 aktvec.add(nummer);
2069 aktvec.add(ZeitFunk.MinutenZuZeit(plstart));
2070 aktvec.add(Integer.toString(pldauer));
2071 aktvec.add(ZeitFunk.MinutenZuZeit(plstart+pldauer));
2072 newvec.add(aktvec);
2073 if(i < (vecgross-1) ){
2074 //hier rein die Abfrage ob Nachfolgeblock
2075 //leer ist
2076 if( ((String)((Vector<String>)vec.get(i+1)).get(0)).equals("") &&
2077 ((String)((Vector<String>)vec.get(i+1)).get(1)).equals("") &&
2078 nachfolgerloeschen){
2079 Vector<String> nachvec = new Vector<String>();
2080 nachvec.add( "" ) ;
2081 nachvec.add( "" ) ;
2082 nachvec.add( (String)aktvec.get(4) ) ;
2083 //Dauer neu einstellen
2084 long dauer = ZeitFunk.ZeitDifferenzInMinuten((String)aktvec.get(4),
2085 ((String)((Vector<String>)vec.get(i+1)).get(4)) );
2087 nachvec.add( Long.toString(dauer) ) ;
2088 //Ende neu einstellen
2089 nachvec.add( ((String)((Vector<String>)vec.get(i+1)).get(4)) );
2090 newvec.add(nachvec);
2091 i+= 1;
2092 continue;
2093 }else{
2094 if(nachfolgerloeschen){
2095 Vector<String> nachvec = new Vector<String>();
2096 nachvec.add( "" ) ;
2097 nachvec.add( "" ) ;
2098 nachvec.add( (String)aktvec.get(4) ) ;
2099 nachvec.add( Integer.toString(tkdauer-pldauer)) ;
2100 nachvec.add( ZeitFunk.MinutenZuZeit(tkende) ) ;
2101 newvec.add(nachvec);
2102 }else{
2103 Vector<String> nachvec = new Vector<String>();
2104 nachvec.add( ((String)((Vector<String>)vec.get(i)).get(0)) ) ;
2105 nachvec.add( ((String)((Vector<String>)vec.get(i)).get(1)) ) ;
2106 nachvec.add( (String)aktvec.get(4) ) ;
2107 nachvec.add( Integer.toString(tkdauer-pldauer)) ;
2108 nachvec.add( ZeitFunk.MinutenZuZeit(tkende) ) ;
2109 newvec.add(nachvec);
2112 }else{
2113 Vector<String> nachvec = new Vector<String>();
2114 nachvec.add( ((String)((Vector<String>)vec.get(i)).get(0)) ) ;
2115 nachvec.add( ((String)((Vector<String>)vec.get(i)).get(1)) ) ;
2116 nachvec.add( (String)aktvec.get(4) ) ;
2117 nachvec.add( Integer.toString(tkdauer-pldauer)) ;
2118 nachvec.add( ZeitFunk.MinutenZuZeit(tkende) ) ;
2119 newvec.add(nachvec);
2121 }else{
2122 newvec.add(vec.get(i));
2125 //System.out.println("Nachblock gesetzt");
2126 //System.out.println(newvec);
2127 String stmt = macheStat(newvec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2128 ////System.out.println("Nur mit Nachblock "+stmt);
2129 try {
2130 ////System.out.println("EscapedDouble String = "+stmt);
2131 schreibeZeile(stmt);
2132 } catch (SQLException e) {
2133 // TODO Auto-generated catch block
2134 e.printStackTrace();
2136 break;
2138 if(art==3){
2139 for(i=0;i<vecgross;i++){
2140 if(i==(block-1)){
2141 Vector<String> vorvec = new Vector<String>();
2142 vorvec.add( ((String)((Vector<String>)vec.get(i)).get(0)) ) ;
2143 vorvec.add( ((String)((Vector<String>)vec.get(i)).get(1)) ) ;
2144 vorvec.add( ZeitFunk.MinutenZuZeit(tkstart)) ;
2145 vorvec.add( Integer.toString(tkdauer-pldauer) ) ;
2146 vorvec.add( ZeitFunk.MinutenZuZeit(plstart)) ;
2147 newvec.add(vorvec);
2149 Vector<String> aktvec = new Vector<String>();
2150 aktvec.add(name);
2151 aktvec.add(nummer);
2152 aktvec.add(ZeitFunk.MinutenZuZeit(plstart));
2153 aktvec.add(Integer.toString(pldauer));
2154 aktvec.add(ZeitFunk.MinutenZuZeit(plstart+pldauer));
2155 newvec.add(aktvec);
2157 }else{
2158 newvec.add(vec.get(i));
2162 String stmt = macheStat(newvec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2163 try {
2164 schreibeZeile(stmt);
2165 } catch (SQLException e) {
2166 e.printStackTrace();
2168 break;
2174 /*****************************************/
2175 private void schreibeLoeschen(Vector<Vector<String>> vec,int zeile,String name,String nummer){
2176 int block = (Integer) jxSucheTable.getValueAt(zeile,16);
2177 int bloecke = vec.size();
2178 int geaendert = Integer.parseInt( (String) jxSucheTable.getValueAt(zeile,18) );
2179 if(bloecke != geaendert ){
2180 ////System.out.println("vermerkt sind "+bloecke+" Blöcke / tatsächlich in der Datenbank sind "+geaendert+" Blöcke");
2181 block += (bloecke-geaendert);
2183 String stmt = null;
2184 // nur den nachfolgenden Block prüfen!!
2185 for(int i=0;i<1;i++){
2186 if(block == 1){
2189 // es gibt nur einen Block
2190 if(bloecke==1){
2191 ////System.out.println(jxSucheTable.getValueAt(zeile,8)+" ist im ersten Block / insgesamt existieren "+vec.size()+" Blöcke");
2192 // es gibt mehrere blöcke
2193 ((Vector<String>)vec.get(block-1)).set(0, "");
2194 ((Vector<String>)vec.get(block-1)).set(1, "");
2195 stmt = macheStat(vec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2196 ////System.out.println("Es gibt nur einen Block, deshalb kann man dirket das statement basteln");
2197 ////System.out.println(stmt);
2198 break;
2199 }else{
2200 //es gibt mehrere bloecke und der betroffene block = der erste, also muß der nachfolgende untersucht werden.
2201 ////System.out.println(jxSucheTable.getValueAt(zeile,8)+" ist im ersten Block / insgesamt existieren "+vec.size()+" Blöcke");
2202 String xname,xnummer;
2203 xname = (String) ((Vector<String>)vec.get(1)).get(0);
2204 xnummer = (String) ((Vector<String>)vec.get(1)).get(1);
2205 if(xname.trim().equals("") && xnummer.trim().equals("")){
2206 String startzeit = (String) ((Vector<String>)vec.get(0)).get(2);
2207 String endzeit = (String) ((Vector<String>)vec.get(1)).get(4);
2208 int dauer1 = Integer.parseInt((String) ((Vector<String>)vec.get(1)).get(3));
2209 int dauer2 = Integer.parseInt((String) ((Vector<String>)vec.get(0)).get(3));
2210 int dauerNeu = dauer1+dauer2;
2211 ((Vector<String>)vec.get(1)).set(0, "");
2212 ((Vector<String>)vec.get(1)).set(1, "");
2213 ((Vector<String>)vec.get(1)).set(2, startzeit);
2214 ((Vector<String>)vec.get(1)).set(3, Integer.toString(dauerNeu));
2215 ((Vector<String>)vec.get(1)).set(4,endzeit);
2216 vec.remove(0);
2217 stmt = macheStat(vec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2218 ////System.out.println("Der betroffene Block ist der erste und der nachfolgende Block = ebenfalls leer");
2219 ////System.out.println(stmt);
2220 break;
2222 }else{
2223 ((Vector<String>)vec.get(block-1)).set(0, "");
2224 ((Vector<String>)vec.get(block-1)).set(1, "");
2225 stmt = macheStat(vec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2226 ////System.out.println("Der betroffene Block ist der erste und der nachfolgende Block = nicht(!!) leer");
2227 ////System.out.println(stmt);
2228 break;
2232 // es gibt mehrere Blöcke aber der betroffene ist der letzte nur den vorherigen Block prüfen
2233 if(block == bloecke){
2234 ////System.out.println(jxSucheTable.getValueAt(zeile,8)+" ist im ersten Block / insgesamt existieren "+vec.size()+" Bl�cke");
2235 String xname,xnummer;
2236 xname = (String) ((Vector<String>)vec.get(block-2)).get(0);
2237 xnummer = (String) ((Vector<String>)vec.get(block-2)).get(1);
2238 if(xname.trim().equals("") && xnummer.trim().equals("")){
2239 String startzeit = (String) ((Vector<String>)vec.get(block-2)).get(2);
2240 String endzeit = (String) ((Vector<String>)vec.get(block-1)).get(4);
2241 int dauer1 = Integer.parseInt((String) ((Vector<String>)vec.get(block-2)).get(3));
2242 int dauer2 = Integer.parseInt((String) ((Vector<String>)vec.get(block-1)).get(3));
2243 int dauerNeu = dauer1+dauer2;
2244 ((Vector<String>)vec.get(block-2)).set(0, "");
2245 ((Vector<String>)vec.get(block-2)).set(1, "");
2246 ((Vector<String>)vec.get(block-2)).set(2, startzeit);
2247 ((Vector<String>)vec.get(block-2)).set(3, Integer.toString(dauerNeu));
2248 ((Vector<String>)vec.get(block-2)).set(4,endzeit);
2249 vec.remove(block-1);
2250 stmt = macheStat(vec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2251 ////System.out.println("Der betroffene Block ist der letzte und der vorhergehende ist ebenfalls leer");
2252 ////System.out.println(stmt);
2253 break;
2254 }else{
2255 ((Vector<String>)vec.get(block-1)).set(0, "");
2256 ((Vector<String>)vec.get(block-1)).set(1, "");
2257 stmt = macheStat(vec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2258 ////System.out.println("Der betroffene Block ist der letzte und der nachfolgende Block = nicht(!!) leer");
2259 ////System.out.println(stmt);
2260 break;
2263 if((block > 1) && (block != bloecke)){
2264 String xname,xnummer,yname,ynummer;
2265 xname = (String) ((Vector<String>)vec.get(block-2)).get(0);
2266 xnummer = (String) ((Vector<String>)vec.get(block-2)).get(1);
2267 yname = (String) ((Vector<String>)vec.get(block)).get(0);
2268 ynummer = (String) ((Vector<String>)vec.get(block)).get(1);
2269 if(( xname.trim().equals("")) && (xnummer.trim().equals("")) &&
2270 ( yname.trim().equals("")) && (ynummer.trim().equals("")) ){
2271 //der Vorbock ist leer und der Nachblock ist auch leef
2272 String startzeitvb = (String) ((Vector<String>)vec.get(block-2)).get(2);
2273 String endzeitnb = (String) ((Vector<String>)vec.get(block)).get(4);
2274 int dauervb = Integer.parseInt((String) ((Vector<String>)vec.get(block-2)).get(3));
2275 int dauerakt = Integer.parseInt((String) ((Vector<String>)vec.get(block-1)).get(3));
2276 int dauernb = Integer.parseInt((String) ((Vector<String>)vec.get(block)).get(3));
2277 int dauerNeu = dauervb+dauerakt+dauernb;
2278 ((Vector<String>)vec.get(block-2)).set(0, "");
2279 ((Vector<String>)vec.get(block-2)).set(1, "");
2280 ((Vector<String>)vec.get(block-2)).set(2, startzeitvb);
2281 ((Vector<String>)vec.get(block-2)).set(3, Integer.toString(dauerNeu));
2282 ((Vector<String>)vec.get(block-2)).set(4,endzeitnb);
2283 vec.remove(block);
2284 vec.remove(block-1);
2285 stmt = macheStat(vec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2286 ////System.out.println("Der betroffene Block ist zwischendrinn der vorhergehende und der nachfolgende sind ebenfalls leer");
2287 ////System.out.println(stmt);
2288 break;
2290 if(( xname.trim().equals("")) && (xnummer.trim().equals("")) ){
2291 //der Vorblock ist leer der Nachblock nicht !!
2292 String startzeit = (String) ((Vector<String>)vec.get(block-2)).get(2);
2293 String endzeit = (String) ((Vector<String>)vec.get(block-1)).get(4);
2294 int dauer1 = Integer.parseInt((String) ((Vector<String>)vec.get(block-2)).get(3));
2295 int dauer2 = Integer.parseInt((String) ((Vector<String>)vec.get(block-1)).get(3));
2296 int dauerNeu = dauer1+dauer2;
2297 ((Vector<String>)vec.get(block-2)).set(0, "");
2298 ((Vector<String>)vec.get(block-2)).set(1, "");
2299 ((Vector<String>)vec.get(block-2)).set(2, startzeit);
2300 ((Vector<String>)vec.get(block-2)).set(3, Integer.toString(dauerNeu));
2301 ((Vector<String>)vec.get(block-2)).set(4,endzeit);
2302 vec.remove(block-1);
2303 stmt = macheStat(vec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2304 ////System.out.println("Der betroffene Block zwischendrinn und der vorhergende ist ebenfalls leer");
2305 ////System.out.println(stmt);
2306 break;
2308 if(( yname.trim().equals("")) && (ynummer.trim().equals("")) ){
2309 //der Vorblock ist nicht leer aber der Nachblock!!
2310 String startzeit = (String) ((Vector<String>)vec.get(block-1)).get(2);
2311 String endzeit = (String) ((Vector<String>)vec.get(block)).get(4);
2312 int dauer1 = Integer.parseInt((String) ((Vector<String>)vec.get(block-1)).get(3));
2313 int dauer2 = Integer.parseInt((String) ((Vector<String>)vec.get(block)).get(3));
2314 int dauerNeu = dauer1+dauer2;
2315 ((Vector<String>)vec.get(block-1)).set(0, "");
2316 ((Vector<String>)vec.get(block-1)).set(1, "");
2317 ((Vector<String>)vec.get(block-1)).set(2, startzeit);
2318 ((Vector<String>)vec.get(block-1)).set(3, Integer.toString(dauerNeu));
2319 ((Vector<String>)vec.get(block-1)).set(4,endzeit);
2320 vec.remove(block);
2321 stmt = macheStat(vec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2322 ////System.out.println("Der betroffene Block zwischendrinn und der nachfolgende ist ebenfalls leer");
2323 ////System.out.println(stmt);
2324 break;
2325 }else{
2326 ((Vector<String>)vec.get(block-1)).set(0, "");
2327 ((Vector<String>)vec.get(block-1)).set(1, "");
2328 stmt = macheStat(vec,Integer.parseInt((String)jxSucheTable.getValueAt(zeile,17)),name,nummer);
2329 ////System.out.println("Der betroffene Block zwischendrinn und weder der vorherige noch der nachfolgende sind leer");
2330 ////System.out.println(stmt);
2331 break;
2336 ////System.out.println(jxSucheTable.getValueAt(zeile,8)+" ist im Block Nr. "+block+" / insgesamt existieren "+vec.size()+" Blöcke");
2339 if(stmt!=null){
2340 try {
2341 schreibeZeile(stmt);
2342 } catch (SQLException e) {
2343 // TODO Auto-generated catch block
2344 e.printStackTrace();
2346 }else{
2350 /*****************************************/
2351 private String macheStat(Vector<Vector<String>> vec,int id,String name,String nummer){
2352 String stmt = "";//String.valueOf();
2353 int gross = vec.size(),i;
2354 String rnummer = null;
2355 String snummer = null;
2356 stmt = "Update flexkc set ";
2357 ////System.out.println(name+" - "+nummer);
2358 for(i=0;i<gross;i++){
2359 ////System.out.println(vec.get(i));
2360 stmt = stmt +"T"+(i+1)+" = '"+StringTools.Escaped(((String)((Vector<String>)vec.get(i)).get(0)))+"'"+", ";
2361 rnummer = ((String)((Vector<String>)vec.get(i)).get(1));
2362 snummer = rnummer.trim().replace("\\", "\\\\") ;
2363 rnummer = snummer.replace("\\\\\\\\", "\\\\");
2364 stmt = stmt +"N"+(i+1)+" = '"+rnummer+"'"+", ";
2365 //stmt = stmt +"N"+(i+1)+" = '"+((String)((Vector)vec.get(i)).get(1))+"'"+", ";
2366 stmt = stmt +"TS"+(i+1)+" = '"+((String)((Vector<String>)vec.get(i)).get(2))+"'"+", ";
2367 stmt = stmt +"TD"+(i+1)+" = '"+((String)((Vector<String>)vec.get(i)).get(3))+"'"+", ";
2368 stmt = stmt +"TE"+(i+1)+" = '"+((String)((Vector<String>)vec.get(i)).get(4))+"'"+", ";
2370 stmt = stmt+ "BELEGT ='"+Integer.toString(vec.size())+"' where id='"+Integer.toString(id)+"'";
2371 ////System.out.println(stmt);
2373 return stmt;
2375 /*****************************************/
2376 private void schreibeZeile(String sstmt) throws SQLException{
2377 Statement stmt = null;
2378 ResultSet rs = null;
2379 boolean res;
2380 //Wenn die Zeilen tats�chlich geschrieben werden sollen ab hier entfernen
2382 int i = 1;
2383 if(i == 1){
2384 return;
2387 //bis hierher entfernen
2388 try {
2389 stmt = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
2390 ResultSet.CONCUR_UPDATABLE );
2392 res = stmt.execute(sstmt);
2393 }finally {
2394 if (rs != null) {
2395 try {
2396 rs.close();
2397 } catch (SQLException sqlEx) { // ignore }
2398 rs = null;
2401 if (stmt != null) {
2402 try {
2403 stmt.close();
2404 } catch (SQLException sqlEx) { // ignore }
2405 stmt = null;
2411 /*****************************************/
2412 private Vector<Vector<String>> sucheZeile(int zeile) throws SQLException{
2413 Statement stmt = null;
2414 ResultSet rs = null;
2415 String suchstmt;
2416 Vector<Vector<String>> vec = new Vector<Vector<String>>();
2417 try {
2418 stmt = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
2419 ResultSet.CONCUR_UPDATABLE );
2420 suchstmt = "select * from flexkc where id = '"+jxSucheTable.getValueAt(zeile,17)+"'";
2423 rs = (ResultSet) stmt.executeQuery(suchstmt);
2424 Vector<String> vx = new Vector<String>();
2425 while(rs.next()){
2426 int bloecke = Integer.parseInt(rs.getString(301));
2427 ////System.out.println("Bl�cke = "+bloecke);
2428 int ii;
2430 for(ii=0;ii<bloecke;ii++){
2431 vx.add(rs.getString("T"+(ii+1)));
2432 vx.add(rs.getString("N"+(ii+1)));
2433 vx.add(rs.getString("TS"+(ii+1)));
2434 vx.add(rs.getString("TD"+(ii+1)));
2435 vx.add(rs.getString("TE"+(ii+1)));
2436 vec.add( (Vector<String>)vx.clone());
2437 vx.clear();
2440 vx.clear();
2441 vx.add(rs.getString("BELEGT"));
2442 vec.add(vx.clone());
2445 vx = null;
2446 }catch(Exception ex){
2448 }finally {
2449 if (rs != null) {
2450 try {
2451 rs.close();
2452 } catch (SQLException sqlEx) { // ignore }
2453 rs = null;
2456 if (stmt != null) {
2457 try {
2458 stmt.close();
2459 } catch (SQLException sqlEx) { // ignore }
2460 stmt = null;
2466 return (Vector<Vector<String>>)vec;//.clone();
2468 /********Ende SwingWorker*/
2471 /**************Ende der Hauptklasse*******************************/
2474 public void propertyChange(PropertyChangeEvent arg0) {
2477 @Override
2478 public void keyPressed(KeyEvent arg0) {
2479 ////System.out.println("********Button in KeyPressed*********");
2480 ////System.out.println(((JComponent)arg0.getSource()).getName());
2481 if(arg0.getKeyCode()== 10 || arg0.getKeyCode()==0){
2482 arg0.consume();
2486 @Override
2487 public void keyReleased(KeyEvent arg0) {
2488 String csource = "";
2489 if(arg0.getKeyCode() == 10 || arg0.getKeyCode() == 0){
2490 csource = ((JComponent)arg0.getSource()).getName();
2491 arg0.consume();
2492 }else{
2493 return;
2495 if(csource.equals("start")){
2496 if(sucheStarten.isEnabled() ){
2497 if(! sucheStarten.isSelected() ){
2498 sucheStarten.setSelected(true);
2499 return;
2500 }else{
2501 knopfGedoense(new int[] {0,1,0,0,0,0,0,0,0,0});
2502 roogleStarten();
2503 sucheStoppen.requestFocus();
2504 return;
2508 if(csource.equals("stop")){
2509 if(sucheStoppen.isEnabled()){
2510 knopfGedoense(new int[] {0,0,1,0,0,0,0,1,1,1});
2511 roogleStoppen();
2512 return;
2515 if(csource.equals("zurueck")){
2516 if(allesZuruecksetzen.isEnabled()){
2517 knopfGedoense(new int[] {1,0,0,0,0,0,0,0,0,0});
2518 roogleZuruecksetzen();
2519 Runtime r = Runtime.getRuntime();
2520 r.gc();
2526 @Override
2527 public void keyTyped(KeyEvent arg0) {
2528 if(arg0.getKeyCode() == 10 || arg0.getKeyCode() == 0){
2529 arg0.consume();
2530 }else{
2531 return;
2535 /***********************Bereits jetzt f�r*************************/
2536 /***********************ein Update vorgesehen*********************/
2537 /*****************************************************************/
2538 class WorkerSuchenInKalenderTagen extends SwingWorker<Void,Void>{
2539 Statement stmt = null;
2540 ResultSet rs = null;
2541 String sergebnis = "";
2542 boolean gesperrt = false;
2543 boolean gruppe = false;
2544 int abteilnr;
2545 String[] exStatement = {null};
2546 String suchkrit1 = "";
2547 String suchkrit2 = "";
2548 String sqlEnde = "";
2549 String sqlAkt = "";
2550 String sqlAlt = "";
2551 String zeit = "";
2552 long zeit1;
2553 int treffer = 0;
2554 int ftage = 0;
2555 String aktDatum = null;
2556 ArrayList<String> atermine = new ArrayList<String>();
2557 public ArrayList<String> sperrDatum = new ArrayList<String>();
2558 //private ArrayList<String> sperrDatum = new ArrayList<String>();
2559 ImageIcon img,img2;
2560 int schichtArt = -1;
2561 int selektivArt = -1;
2562 SuchenSeite eltern;
2563 Vector<Object> machevec = new Vector<Object>();
2566 public void setzeStatement(SuchenSeite xeltern){
2567 eltern = xeltern;
2569 img = SystemConfig.hmSysIcons.get("zuzahlnichtok");
2570 img2 = SystemConfig.hmSysIcons.get("zuzahlfrei");
2571 //img = new ImageIcon(Reha.proghome+"icons/Kreuz_klein.gif");
2572 //img2 = new ImageIcon(Reha.proghome+"icons/frei.png");
2573 img.setDescription("gesperrt");
2574 img2.setDescription("offen");
2575 setZeit();
2576 zeit = getZeit();
2577 this.sperrDatum.clear();
2578 if(SuchenSeite.selektiv){
2579 selektivArt = macheSelektiv();
2585 @Override
2586 protected Void doInBackground() throws Exception {
2587 // TODO Auto-generated method stub
2590 //Vector treadVect = new Vector();
2591 aktDatum = getAktDatum();
2593 try {
2594 stmt = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
2595 ResultSet.CONCUR_UPDATABLE );
2596 sqlEnde = DatFunk.sDatInSQL(getStopDatum());
2598 sqlAkt = DatFunk.sDatInSQL(aktDatum);
2599 sqlAlt = sqlAkt;
2601 suchkrit1 = getSuchName().trim();
2602 suchkrit2 = getSuchNummer().trim();
2603 int suchArt = 0;
2604 int dbzeil = -1;
2605 String szeil = "";
2607 int gruppereal,gruppewant;
2609 for(int j=0;j<1;j++){
2610 if(suchkrit1.equals("")&& suchkrit2.equals("")){
2611 // es wird nach leeren Terminen gesucht
2612 suchArt = 1;
2613 break;
2615 if( (!suchkrit1.equals(""))&& suchkrit2.equals("")){
2616 // es wird nach einem Namen gesucht
2617 suchArt = 2;
2618 break;
2620 if( (suchkrit1.equals(""))&& (!suchkrit2.equals(""))){
2621 // es wird nach einer Nummer gesucht
2622 suchArt = 3;
2623 break;
2625 if( (!suchkrit1.equals(""))&& (!suchkrit2.equals(""))){
2626 // es wird nach einem Namen und nach einer Nummer gesucht
2627 suchArt = 4;
2628 break;
2632 String[] abtei = {"KG","MA","ER","LO","SP"};
2634 zeit1 = System.currentTimeMillis();
2635 tabelleAusschalten();
2636 setFortschrittRang(0,DatFunk.TageDifferenz( eltern.getStartDatum(), eltern.getStopDatum() ) );
2637 setFortschrittSetzen(0);
2638 setFortschrittZeigen(true);
2639 Vector<String> abtlg = new Vector<String>(Arrays.asList(abtei));
2640 Vector<Object> yvec = null;
2641 sperrDatum.clear();
2642 int aktuell;
2643 String sperre;
2644 String cmd;
2645 int ret;
2646 while( (DatFunk.DatumsWert(sqlAkt) <= DatFunk.DatumsWert(sqlEnde)) && (!SuchenSeite.mussUnterbrechen)){
2647 setzeDatum(aktDatum );
2648 if( tagDurchsuchen(aktDatum) ){
2651 String test = "";
2652 if(getGewaehlt() <= 20){
2653 test = macheStatement(sqlAkt);
2654 ////System.out.println(test);
2655 }else{
2656 test = "select * from flexkc where datum = '"+sqlAkt+"' LIMIT "+ParameterLaden.maxKalZeile;
2658 rs = (ResultSet) stmt.executeQuery(test);
2661 while(rs.next()){
2664 /*in Spalte 301 steht die Anzahl der belegten Bl�cke*/
2665 int belegt = rs.getInt(301);
2667 String name = "";
2668 String nummer = "";
2669 String skollege = "";
2670 //int dauer = 0;
2671 int ikollege = 0;
2672 int defdauer = 0;
2675 skollege = rs.getString(303).substring(0,2);
2676 if( skollege.substring(0,1) == "0" ){
2677 ikollege = Integer.parseInt(skollege.substring(1,2));
2678 }else{
2679 ikollege = Integer.parseInt(skollege);
2682 /***************Hier wird getestet ob die Kalender zeile belegt ist*****/
2683 /********wenn ein Benutzer gel�scht wurde kommt leer zur�ck*******/
2684 szeil = ParameterLaden.getKollegenUeberDBZeile(ikollege);
2685 ////System.out.println("Kollege �ber DBZeile = "+szeil);
2686 if(!szeil.equals("")){
2688 String sabteilung = eltern.kollegenAbteilung[ikollege].trim();//getKollegenAbteilung(ikollege).trim();
2689 if(! sabteilung.equals("") ){
2690 if( (abtlg.contains(sabteilung)) ){
2691 defdauer = (int) eltern.hZeiten.get(eltern.kollegenAbteilung[ikollege]);
2692 //getKollegenAbteilung(ikollege));
2693 gruppe = false;
2694 }else{
2695 ////System.out.println("Kollege "+szeil+" hat keine Zeitzuordnung, nehme Gruppendefiniton");
2698 if( (abteilnr = SystemConfig.oGruppen.gruppenNamen.indexOf(sabteilung)) >= 0){
2699 defdauer = Long.valueOf(SystemConfig.oGruppen.gruppenGueltig.get(abteilnr)[2]).intValue();
2700 //defdauer = (int) new Long(SystemConfig.oGruppen.gruppenGueltig.get(abteilnr)[2]).intValue();
2701 ////System.out.println("G�ltig ab:"+ datFunk.WertInDatum(SystemConfig.oGruppen.gruppenGueltig.get(abteilnr)[0]));
2702 //ermitteln ob alte oder neue Definition verwendet werden soll // in Variable ablegen
2703 //dann Sprung in die Tests
2704 }else{
2705 abteilnr = -1;
2706 defdauer = 15;
2708 gruppe = true;
2711 }else{
2712 defdauer = 15;
2713 gruppe = false;
2716 int ii;
2717 for(ii = 1;ii <= belegt;ii++){
2719 name = ( rs.getString("T"+(ii))== null ? "" : rs.getString("T"+(ii)).trim() );
2720 nummer = ( rs.getString("N"+(ii))== null ? "" : rs.getString("N"+(ii)).trim() );
2723 if(! (eltern.getKollegenSuchen(ikollege)) ){
2724 ////System.out.println("Keine Suche erforderlich f�r Kollege "+ikollege);
2725 // falls hier nicht gesucht werden soll = anzahl > 20
2726 break;
2730 int j;
2731 yvec = null;
2732 int kaldauer = Integer.parseInt(rs.getString("TD"+(ii)));
2734 for(j=0;j<1;){
2735 boolean keintest = keinTest();
2736 if( (suchArt==1) && (kaldauer < defdauer)){
2737 // wenn die Terminkaldauer kleiner als die eingestellte Dauer
2738 break;
2740 if( (suchArt==1)){
2741 // leerer Termin gesucht
2742 if((keintest) && (!gruppe)){
2743 yvec = sucheNachFreien(rs,name,nummer,skollege,ikollege,ii,defdauer);
2744 ////System.out.println("Es wurde ein vecor erstllt");
2745 break;
2747 if( (keintest) && (gruppe)){
2748 if(name.equals("") && nummer.equals("")){
2749 Vector vecgruppe;
2750 if(abteilnr < 0){
2751 break;
2753 if( (vecgruppe = gruppenTest(rs,abteilnr,ii,defdauer,true)) != null){
2754 ////System.out.println("In Gruppensuchen nach Freien");
2755 yvec = sucheNachGruppenFreien(rs,name,nummer,skollege,ikollege,ii,defdauer,abteilnr,vecgruppe,true);
2756 //System.out.println("Leersuche"+yvec);
2759 break;
2761 if(schicht){
2762 if(freiTermin(name,nummer)){
2763 if(schichtTest(rs,ii,defdauer)){
2764 yvec = sucheNachSelect(rs,name,nummer,skollege,ikollege,ii,defdauer);
2765 break;
2768 break;
2770 if(selektiv){
2771 if(freiTermin(name,nummer)){
2772 if(selektivTest(rs,ii,defdauer)){
2773 yvec = sucheNachSelect(rs,name,nummer,skollege,ikollege,ii,defdauer);
2774 break;
2777 break;
2781 /***********************************/
2782 if( (suchArt==2)){
2783 if(name.contains(suchkrit1) && !nummer.contains("@FREI") && (!gruppe) ){
2784 if(suchkrit1.equals("#KGG")){
2785 yvec = sucheNachKGG(rs,name,nummer,skollege,ikollege,ii,defdauer);
2786 break;
2788 if(name.contains("KGG")){
2789 yvec = sucheNachKGG(rs,name,nummer,skollege,ikollege,ii,defdauer);
2790 break;
2792 yvec = sucheNachNamen(rs,name,nummer,skollege,ikollege,ii);
2793 break;
2795 if(name.contains(suchkrit1) && !nummer.contains("@FREI") && (gruppe) ){
2796 Vector vecgruppe;
2797 if( (vecgruppe = gruppenTest(rs,abteilnr,ii,defdauer,false)) != null){
2798 yvec = sucheNachGruppenFreien(rs,name,nummer,skollege,ikollege,ii,defdauer,abteilnr,vecgruppe,false);
2799 //System.out.println("Suchkrit 1 + Suchkrit 2 "+yvec);
2800 gruppereal = Integer.parseInt( (String)yvec.get(5));
2801 gruppewant = Integer.parseInt( (String)yvec.get(7));
2802 if(gruppereal < gruppewant){
2803 yvec.set(7,Integer.toString(gruppereal));
2807 break;
2809 /***********************************/
2810 if( (suchArt==3)){
2811 if(nummer.contains(suchkrit2) && (!gruppe) ){
2812 if(name.contains("KGG")){
2813 yvec = sucheNachKGG(rs,name,nummer,skollege,ikollege,ii,defdauer);
2814 break;
2816 yvec = sucheNachNamen(rs,name,nummer,skollege,ikollege,ii);
2817 break;
2819 if(nummer.contains(suchkrit2) && (gruppe) ){
2820 Vector vecgruppe;
2821 if( (vecgruppe = gruppenTest(rs,abteilnr,ii,defdauer,false)) != null){
2822 yvec = sucheNachGruppenFreien(rs,name,nummer,skollege,ikollege,ii,defdauer,abteilnr,vecgruppe,false);
2823 //System.out.println("Suchkrit 2 "+yvec);
2824 gruppereal = Integer.parseInt( (String)yvec.get(5));
2825 gruppewant = Integer.parseInt( (String)yvec.get(7));
2826 if(gruppereal < gruppewant){
2827 yvec.set(7,Integer.toString(gruppereal));
2832 break;
2834 /***********************************/
2835 if( (suchArt==4)){
2836 if(name.contains(suchkrit1) && nummer.contains(suchkrit2) && (!gruppe) ){
2837 if(suchkrit1.equals("#KGG")){
2838 yvec = sucheNachKGG(rs,name,nummer,skollege,ikollege,ii,defdauer);
2839 break;
2841 if(name.contains("KGG")){
2842 yvec = sucheNachKGG(rs,name,nummer,skollege,ikollege,ii,defdauer);
2843 break;
2845 yvec = sucheNachNamen(rs,name,nummer,skollege,ikollege,ii);
2846 break;
2848 if(name.contains(suchkrit1) && nummer.contains(suchkrit2) && (gruppe) ){
2849 Vector vecgruppe;
2850 if(abteilnr < 0){
2851 break;
2853 if( (vecgruppe = gruppenTest(rs,abteilnr,ii,defdauer,false)) != null){
2854 ////System.out.println("In Gruppensuchen nach Freien");
2855 yvec = sucheNachGruppenFreien(rs,name,nummer,skollege,ikollege,ii,defdauer,abteilnr,vecgruppe,false);
2856 //System.out.println("Suchkrit 1 + Suchkrit 2 "+yvec);
2857 gruppereal = Integer.parseInt( (String)yvec.get(5));
2858 gruppewant = Integer.parseInt( (String)yvec.get(7));
2859 if(gruppereal < gruppewant){
2860 yvec.set(7,Integer.toString(gruppereal));
2864 break;
2867 /***********************************/
2868 break;
2871 if(yvec != null){
2872 ++treffer;
2873 yvec.set(1,img2);
2874 getInstance().dtblm.addRow(yvec);
2875 /**************************/
2876 aktuell = dtblm.getRowCount();
2877 SuchenSeite.verarbeitetLbl.setText(Integer.toString(aktuell));
2878 sperre = (String)dtblm.getValueAt(aktuell-1,13)+
2879 dtblm.getValueAt(aktuell-1,14) ;
2880 if(!sperrDatum.contains(sperre+SystemConfig.dieseMaschine+zeit)){
2881 cmd = "sperre='"+sperre+"'";
2882 ret = SqlInfo.zaehleSaetze("flexlock", cmd);
2883 if(ret==0){
2884 cmd = "insert into flexlock set sperre='"+sperre+"', maschine='"+SystemConfig.dieseMaschine+"', "+
2885 "zeit='"+zeit+"'";
2886 SqlInfo.sqlAusfuehren(cmd);
2887 sperrDatum.add(sperre+SystemConfig.dieseMaschine+zeit);
2888 }else{
2889 dtblm.setValueAt(img,aktuell-1,1);
2892 //sucheDaten.add(yvec);
2893 trefferSetzen();
2896 } // ende der for f�r die einzelnen Felder
2897 /*****************/
2898 } //neu endif von: keine Zeile im Kalender
2899 } // Klammer der While
2901 aktDatum = DatFunk.sDatPlusTage(aktDatum, 1);
2902 setFortschrittSetzen(++ftage);
2903 sqlAlt = String.valueOf(sqlAkt);
2904 sqlAkt = DatFunk.sDatInSQL(aktDatum );
2905 }else{
2906 aktDatum = DatFunk.sDatPlusTage(aktDatum, 1);
2907 sqlAlt = sqlAkt;
2908 sqlAkt = DatFunk.sDatInSQL(aktDatum ); ////System.out.println(SuchenSeite.getAktDatum()+"-"+SuchenSeite.tagDurchsuchen(SuchenSeite.getAktDatum()) );
2909 setFortschrittSetzen(++ftage);
2911 /*********Ende der oberen While*********/
2913 }catch(SQLException ex) {
2914 //System.out.println("von stmt -SQLState: " + ex.getSQLState());
2915 }catch(Exception ex2){
2916 ex2.printStackTrace();
2922 finally {
2923 if (rs != null) {
2924 try {
2925 rs.close();
2926 rs = null;
2927 } catch (SQLException sqlEx) { // ignore }
2928 rs = null;
2931 if (stmt != null) {
2932 try {
2933 stmt.close();
2934 stmt = null;
2935 } catch (SQLException sqlEx) { // ignore }
2936 stmt = null;
2941 if (DatFunk.DatumsWert(sqlAkt) > DatFunk.DatumsWert(sqlEnde)){
2942 setSucheBeendet();
2943 setFortschrittZeigen(false);
2945 long dauer = (System.currentTimeMillis()-zeit1);
2946 SwingUtilities.invokeLater(new Runnable(){
2947 public void run(){
2948 setKnopfGedoense(new int[] {0,0,0,0,0,0,0,1,1,1});
2949 tabelleEinschalten();
2950 listenerEinschalten();
2951 ////System.out.println("Vectorgröße = "+getInstance().dtblm.getRowCount());
2952 mussUnterbrechen = true;
2953 jxSucheTable.revalidate();
2956 return null;
2958 private Vector getColVec(){
2959 Vector cols = new Vector();
2960 String[] column = {"x?","G!","Datum","von","bis","Min.","Beginn","Dauer.","Namen","Rez.Nr.","Behandler",
2961 // 12 13 14 15 16 17 18 19
2962 "Druckzeit","Sort","Spalte","sDatum","sOrigDatum","iBlock","id","maxblock",""};
2963 for(int i = 0; i < column.length;i++){
2964 cols.add(column[i]);
2966 return (Vector)cols;//(Vector)cols.clone();
2969 /********************************************/
2970 private Vector gruppenTest(ResultSet rs, int gruppe,int feld,int defdauer,boolean suchleer) throws SQLException{
2972 Vector vecret = null;
2973 String sDatum = DatFunk.sDatInDeutsch(rs.getString("DATUM"));
2975 int taginwoche = DatFunk.TagDerWoche(sDatum);
2976 int altneu = 1;
2978 if( DatFunk.DatumsWert(sDatum) >=
2979 SystemConfig.oGruppen.gruppenGueltig.get(gruppe)[0] ){
2980 altneu = 0;
2982 int xdauer = Integer.parseInt(rs.getString("TD"+(feld)).trim());
2983 String xzeit = rs.getString("TS"+(feld)).trim().substring(0,5);
2985 int gross = (int)((Vector)((Vector)((Vector)SystemConfig.oGruppen.gruppeAlle.get(gruppe)).get(altneu)).get(taginwoche-1)).size();
2987 System.out.println("\n***************************************\n");
2988 System.out.println("Termine = "+gross);
2989 System.out.println("Defdauer = "+defdauer);
2990 System.out.println("VerfügbarDauer = "+xdauer);
2991 System.out.println("SuchLeer = "+suchleer);
2993 for(int i = 0;i<gross;i++){
2994 long lgrenzeklein =(Long) ((Vector)((Vector)((Vector)((Vector)SystemConfig.oGruppen.gruppeAlle.get(gruppe)).get(altneu)).get(taginwoche-1)).get(i)).get(0);
2995 long lgrenzegross =(Long) ((Vector)((Vector)((Vector)((Vector)SystemConfig.oGruppen.gruppeAlle.get(gruppe)).get(altneu)).get(taginwoche-1)).get(i)).get(1);
2997 if(longPasstZwischen(lgrenzeklein,lgrenzegross,xzeit,(suchleer ? defdauer : xdauer))){
2998 vecret = (Vector) ((Vector)((Vector)((Vector)((Vector)SystemConfig.oGruppen.gruppeAlle.get(gruppe)).get(altneu)).get(taginwoche-1)).get(i));
3000 System.out.println("passt zwischen");
3001 System.out.println(vecret);
3003 return (Vector)vecret;
3010 return vecret;
3012 private boolean schichtTest(ResultSet rs,int ii,int defdauer) throws SQLException{
3013 String kalende,kalanfang,datum;
3014 String pbeginn,pende,uhr1,uhr2;
3015 boolean wogerade = false;
3016 int[] selektparm1=null;
3017 int[] selektparm2=null;
3018 pbeginn = rs.getString("TS"+ii);
3019 pende = rs.getString("TE"+ii);
3020 wogerade = DatFunk.GeradeWoche(DatFunk.sDatInDeutsch(rs.getString("DATUM")));
3021 kalanfang = SystemConfig.KalenderUmfang[0];
3022 kalende = SystemConfig.KalenderUmfang[1];
3024 // Bearbeitet nur gerade Kalenderwochen
3025 uhr1 = schichtUhr[0];
3026 uhr2 = schichtUhr[1];
3027 if((wogerade) && (schichtWal[0])){
3028 if(schichtVor[0]){
3029 selektparm1 = (Schnittmenge(kalanfang,uhr1,pbeginn,pende));
3030 if(selektparm1[0] >=defdauer){
3031 String drzeit = (selektparm1[3] > 0 ?
3032 ZeitFunk.MinutenZuZeit(selektparm1[1]).substring(0,5) :
3033 ZeitFunk.MinutenZuZeit(selektparm1[2]-defdauer).substring(0,5));
3034 selektbeginn = drzeit;
3035 return true;
3036 }else{
3037 return false;
3039 }else{
3040 selektparm1 = (Schnittmenge(uhr1,kalende,pbeginn,pende));
3041 if(selektparm1[0] >=defdauer){
3042 String drzeit = (selektparm1[3] > 0 ?
3043 ZeitFunk.MinutenZuZeit(selektparm1[1]).substring(0,5) :
3044 ZeitFunk.MinutenZuZeit(selektparm1[2]-defdauer).substring(0,5));
3045 selektbeginn = drzeit;
3046 return true;
3047 }else{
3048 return false;
3052 if((!wogerade) && (schichtWal[1])){
3053 if(schichtVor[1]){
3054 selektparm1 = (Schnittmenge(kalanfang,uhr2,pbeginn,pende));
3055 if(selektparm1[0] >=defdauer){
3056 String drzeit = (selektparm1[3] > 0 ?
3057 ZeitFunk.MinutenZuZeit(selektparm1[1]).substring(0,5) :
3058 ZeitFunk.MinutenZuZeit(selektparm1[2]-defdauer).substring(0,5));
3059 selektbeginn = drzeit;
3060 return true;
3061 }else{
3062 return false;
3064 }else{
3065 selektparm1 = (Schnittmenge(uhr2,kalende,pbeginn,pende));
3066 if(selektparm1[0] >=defdauer){
3067 String drzeit = (selektparm1[3] > 0 ?
3068 ZeitFunk.MinutenZuZeit(selektparm1[1]).substring(0,5) :
3069 ZeitFunk.MinutenZuZeit(selektparm1[2]-defdauer).substring(0,5));
3070 selektbeginn = drzeit;
3071 return true;
3072 }else{
3073 return false;
3077 return false;
3079 private boolean selektivTest(ResultSet rs,int ii,int defdauer) throws SQLException{
3080 //long planbeginn,planende;
3081 String kalende,kalanfang;
3082 String pbeginn,pende,wbeginn1,wende1,wbeginn2,wende2;
3083 pbeginn = rs.getString("TS"+ii);
3084 pende = rs.getString("TE"+ii);
3085 wbeginn1 = selectUhr[0];
3086 wende1 = selectUhr[1];
3087 wbeginn2 = selectUhr[2];
3088 wende2 = selectUhr[3];
3090 kalanfang = SystemConfig.KalenderUmfang[0];
3091 kalende = SystemConfig.KalenderUmfang[1];
3094 int[] selektparm1=null;
3095 int[] selektparm2=null;
3096 for(int v = 0;v < 1; v++){
3097 /*******************************/
3098 if(macheSelektiv()==0){
3099 selektparm1 = (Schnittmenge(wbeginn1,kalende,pbeginn,pende));
3100 if(selektparm1[0] >=defdauer){
3101 String drzeit = (selektparm1[3] > 0 ?
3102 ZeitFunk.MinutenZuZeit(selektparm1[1]).substring(0,5) :
3103 ZeitFunk.MinutenZuZeit(selektparm1[2]-defdauer).substring(0,5));
3104 selektbeginn = drzeit;
3105 return true;
3106 }else{
3107 return false;
3110 /*******************************/
3111 if(macheSelektiv()==1){
3112 selektparm1 = Schnittmenge(kalanfang,wende1,pbeginn,pende);
3113 if(selektparm1[0 ]>=defdauer){
3114 String drzeit = (selektparm1[3] > 0 ?
3115 ZeitFunk.MinutenZuZeit(selektparm1[1]).substring(0,5) :
3116 ZeitFunk.MinutenZuZeit(selektparm1[2]-defdauer).substring(0,5));
3117 selektbeginn = drzeit;
3118 return true;
3119 }else{
3120 return false;
3123 /*******************************/
3124 if(macheSelektiv()==2){
3125 selektparm1 = Schnittmenge(wbeginn1,wende1,pbeginn,pende);
3126 if(( selektparm1[0] >=defdauer)){
3127 String drzeit = (selektparm1[3] > 0 ?
3128 ZeitFunk.MinutenZuZeit(selektparm1[1]).substring(0,5) :
3129 ZeitFunk.MinutenZuZeit(selektparm1[2]-defdauer).substring(0,5));
3130 selektbeginn = drzeit;
3131 return true;
3132 }else{
3133 return false;
3136 /**************ab hier mit ODER - Bedingung***************/
3137 if(macheSelektiv()==3){
3138 selektparm1 = Schnittmenge(wbeginn1,wende1,pbeginn,pende);
3139 selektparm2 = Schnittmenge(wbeginn2,kalende,pbeginn,pende);
3140 if( (selektparm1[0]>=defdauer) || (selektparm2[0]>=defdauer) ){
3141 if(selektparm1[0] >= defdauer){
3142 //if(selektparm1[3] == -1){//System.out.println("Anfang = -1 - "+pbeginn);}
3143 String drzeit = (selektparm1[3] > 0 ?
3144 ZeitFunk.MinutenZuZeit(selektparm1[1]).substring(0,5) :
3145 ZeitFunk.MinutenZuZeit(selektparm1[2]-defdauer).substring(0,5));
3146 selektbeginn = drzeit;
3147 }else{
3148 String drzeit = (selektparm2[3] > 0 ?
3149 ZeitFunk.MinutenZuZeit(selektparm2[1]).substring(0,5) :
3150 ZeitFunk.MinutenZuZeit(selektparm2[2]-defdauer).substring(0,5));
3151 selektbeginn = drzeit;
3153 return true;
3154 }else{
3155 return false;
3158 /*******************************/
3159 if(macheSelektiv()==4){
3160 selektparm1 = Schnittmenge(wbeginn1,wende1,pbeginn,pende);
3161 selektparm2 = Schnittmenge(kalanfang,wende2,pbeginn,pende);
3162 if( (selektparm1[0]>=defdauer) || (selektparm2[0]>=defdauer) ){
3163 if(selektparm1[0] >= defdauer){
3164 String drzeit = (selektparm1[3] > 0 ?
3165 ZeitFunk.MinutenZuZeit(selektparm1[1]).substring(0,5) :
3166 ZeitFunk.MinutenZuZeit(selektparm1[2]-defdauer).substring(0,5));
3167 selektbeginn = drzeit;
3168 }else{
3169 String drzeit = (selektparm2[3] > 0 ?
3170 ZeitFunk.MinutenZuZeit(selektparm2[1]).substring(0,5) :
3171 ZeitFunk.MinutenZuZeit(selektparm2[2]-defdauer).substring(0,5));
3172 selektbeginn = drzeit;
3174 return true;
3175 }else{
3176 return false;
3179 /*******************************/
3180 if(macheSelektiv()==5){
3181 selektparm1 = Schnittmenge(wbeginn1,wende1,pbeginn,pende);
3182 selektparm2 = Schnittmenge(wbeginn2,wende2,pbeginn,pende);
3183 if( (selektparm1[0]>=defdauer) || (selektparm2[0]>=defdauer) ){
3184 if(selektparm1[0] >= defdauer){
3185 String drzeit = (selektparm1[3] > 0 ?
3186 ZeitFunk.MinutenZuZeit(selektparm1[1]).substring(0,5) :
3187 ZeitFunk.MinutenZuZeit(selektparm1[2]-defdauer).substring(0,5));
3188 selektbeginn = drzeit;
3189 }else{
3190 String drzeit = (selektparm2[3] > 0 ?
3191 ZeitFunk.MinutenZuZeit(selektparm2[1]).substring(0,5) :
3192 ZeitFunk.MinutenZuZeit(selektparm2[2]-defdauer).substring(0,5));
3193 selektbeginn = drzeit;
3195 return true;
3196 }else{
3197 return false;
3202 return false;
3204 boolean passtZwischen(String sgrenzeklein,String sgrenzegross,String szeit,int dauer){
3205 long z1 = ZeitFunk.MinutenSeitMitternacht(sgrenzeklein);
3206 long z2 = ZeitFunk.MinutenSeitMitternacht(sgrenzegross);
3207 long z3 = ZeitFunk.MinutenSeitMitternacht(szeit)+Long.parseLong(Integer.toString(dauer));
3208 return( ((z3 >= z1) && (z3<=z2)) ? true : false);
3210 boolean longPasstZwischen(long lgrenzeklein,long lgrenzegross,String szeit,int dauer){
3211 long z1 = lgrenzeklein;
3212 long z2 = lgrenzegross;
3214 long z3 = ZeitFunk.MinutenSeitMitternacht(szeit)+Long.parseLong(Integer.toString(dauer));
3215 return( ((z3 >= z1) && (z3<=z2)) ? true : false);
3217 boolean ZeitGroesserGleich(String szeit1,String szeit2){
3218 long z1 = ZeitFunk.MinutenSeitMitternacht(szeit1);
3219 long z2 = ZeitFunk.MinutenSeitMitternacht(szeit2);
3220 return( z2 >= z1 ? true : false);
3222 boolean ZeitGroesser(String szeit1,String szeit2){
3223 long z1 = ZeitFunk.MinutenSeitMitternacht(szeit1);
3224 long z2 = ZeitFunk.MinutenSeitMitternacht(szeit2);
3225 return( z2 > z1 ? true : false);
3227 boolean ZeitKleinerGleich(String szeit1,String szeit2){
3228 long z1 = ZeitFunk.MinutenSeitMitternacht(szeit1);
3229 long z2 = ZeitFunk.MinutenSeitMitternacht(szeit2);
3230 return( z2 <= z1 ? true : false);
3232 boolean ZeitKleiner(String szeit1,String szeit2){
3233 long z1 = ZeitFunk.MinutenSeitMitternacht(szeit1);
3234 long z2 = ZeitFunk.MinutenSeitMitternacht(szeit2);
3235 return( z2 < z1 ? true : false);
3237 int[] Schnittmenge(String sklein1,String sgross1,String sklein2,String sgross2 ){
3238 long z1 = ZeitFunk.MinutenSeitMitternacht(sklein1);
3239 long z2 = ZeitFunk.MinutenSeitMitternacht(sgross1);
3240 long z3 = ZeitFunk.MinutenSeitMitternacht(sklein2);
3241 long z4 = ZeitFunk.MinutenSeitMitternacht(sgross2);
3242 long schnittbeginn, schnittende;
3243 int ananfang = 1;
3244 // Wenn Wunschbeginn fr�her oder gleich als gefundener Termin-Beginn
3245 if ( (z1 <= z3) && (z2 >= z4) ){
3246 schnittbeginn = z3;
3247 schnittende = z4;
3248 ananfang = 1;
3249 return new int[] {Long.valueOf(schnittende-schnittbeginn).intValue(),Long.valueOf(schnittbeginn).intValue(),Long.valueOf(schnittende).intValue(),ananfang};
3252 if(z1 <= z3){
3253 schnittbeginn = z3;
3254 ananfang = 1;
3255 //return new Long(z2-z3).intValue();
3256 }else if(z1 > z3){
3257 schnittbeginn = z1;
3258 ananfang = 0;
3259 }else {
3260 schnittbeginn = -1;
3261 ananfang = -1;
3263 if(z2 <= z4){
3264 schnittende = z2;
3265 ananfang = 1;
3266 }else if(z2 > z4){
3267 schnittende = z4;
3268 ananfang = 0;
3269 }else{
3270 ananfang = -1;
3271 schnittende = -1;
3274 return new int[] {Long.valueOf(schnittende-schnittbeginn).intValue(),Long.valueOf(schnittbeginn).intValue(),Long.valueOf(schnittende).intValue(),ananfang};
3278 private int macheSelektiv(){
3279 boolean c0 = selectWal[0];
3280 boolean c1 = selectWal[1];
3281 boolean c2 = selectWal[2];
3282 boolean c3 = selectWal[3];
3283 if((c0) && (!c1) && (!c2) && (!c3)){
3284 return 0;
3286 if((!c0) && (c1) && (!c2) && (!c3)){
3287 return 1;
3289 if((c0) && (c1) && (!c2) && (!c3)){
3290 return 2;
3292 if((c0) && (c1) && (c2) && (!c3)){
3293 return 3;
3295 if((c0) && (c1) && (!c2) && (c3)){
3296 return 4;
3298 if((c0) && (c1) && (c2) && (c3)){
3299 return 5;
3302 return -1;
3304 private boolean keinTest(){
3305 return ((!schicht) &&(!selektiv) ? true : false);
3307 public void trefferSetzen(){
3308 SwingUtilities.invokeLater(new Runnable(){
3309 public void run(){
3310 setzeTreffer(treffer);
3314 private String macheStatement(String sqldatum){
3315 String ret = "";
3316 int i,lang;
3317 int isuchen = 0;
3318 String ssuchen = "";
3319 String stmt = "";
3320 lang = getKollegenEinstellen().length;
3322 for (i=0;i<lang;i++){
3324 if(((Boolean)getKollegenEinstellen()[i][1]) ){
3325 ////System.out.println("Inhalt von [i]="+i+" / Inhalt von [5=]"+SuchenSeite.getKollegenEinstellen()[i][5] );
3326 int dbZeile = (Integer) getKollegenEinstellen()[i][0];
3327 //int dbZeile = (Integer) SuchenSeite.getKollegenEinstellen()[i][5];
3328 ssuchen = (dbZeile<=9 ? "0"+(dbZeile)+"BEHANDLER" : (dbZeile)+"BEHANDLER");
3329 if(isuchen==0){
3330 stmt = "select * from flexkc where datum = '";
3331 stmt = stmt+sqldatum+"' AND (BEHANDLER='"+ssuchen+"'";
3332 ++isuchen;
3333 }else{
3334 stmt = stmt+" OR BEHANDLER='"+ssuchen+"'";
3335 ++isuchen;
3339 if(isuchen > 0){
3340 stmt = stmt+") ORDER BY BEHANDLER";
3342 return stmt;
3347 /************ alternative ***********/
3348 private boolean freiTermin(String name,String nummer) throws SQLException{
3349 if(name.equals("") && nummer.equals("") ){
3350 return true;
3352 return false;
3355 private Vector<Object> sucheNachFreien(ResultSet rs,String name,String nummer,String skollege,int ikollege,int ii,int defdauer) throws SQLException{
3356 Vector<Object> vec = null;
3357 if(name.equals("") && nummer.equals("") ){
3358 vec = macheVector(rs,name,nummer,skollege,ikollege,ii,defdauer);
3360 return vec;
3362 private Vector<Object> sucheNachGruppenFreien(ResultSet rs,String name,String nummer,String skollege,int ikollege,int ii,int defdauer,int gruppennr,Vector<?> grupdat,boolean suchleer) throws SQLException{
3363 // //System.out.println("Gültig ab:"+ datFunk.WertInDatum(SystemConfig.oGruppen.gruppenGueltig.get(gruppennr)[0]));
3364 Vector<Object> vec = null;
3365 vec = macheGruppenVector(rs,name,nummer,skollege,ikollege,ii,defdauer,grupdat,suchleer);
3366 return vec;
3369 private Vector<Object> sucheNachNamen(ResultSet rs,String name,String nummer,String skollege,int ikollege,int ii) throws SQLException{
3370 Vector<Object> vec = null;
3371 if(name.contains(suchkrit1)){
3372 vec = macheVector(rs,name,nummer,skollege,ikollege,ii,-1);
3374 return vec;
3376 private Vector<Object> sucheNachSelect(ResultSet rs,String name,String nummer,String skollege,int ikollege,int ii,int defdauer) throws SQLException{
3377 Vector<Object> vec = null;
3378 vec = macheVector(rs,name,nummer,skollege,ikollege,ii,defdauer);
3379 vec.set(6, selektbeginn);
3380 return vec;
3382 private Vector<Object> sucheNachKGG(ResultSet rs,String name,String nummer,String skollege,int ikollege,int ii,int defdauer) throws SQLException{
3383 Vector<Object> vec = null;
3384 vec = macheKGGVector(rs,name,nummer,skollege,ikollege,ii,defdauer);
3385 return vec;
3388 private Vector<Object> macheVector(ResultSet rs,String name,String nummer,String skollege,int ikollege,int ii,int defdauer) throws SQLException{
3389 //Vector vec = new Vector();
3390 machevec.clear();
3391 machevec.trimToSize();
3392 String uhrzeit;
3393 String sorigdatum;
3394 String sdatum;
3396 uhrzeit = rs.getString("TS"+(ii));
3398 sorigdatum = rs.getString(305);
3399 sdatum = DatFunk.sDatInDeutsch(sorigdatum);
3400 skollege = (String) ParameterLaden.getKollegenUeberReihe(ikollege);
3401 //{"x?","G!","Datum","Beginn","Ende","Min.","Namen","Rez.Nr.","Behandler","Druckzeit","Sort","Spalte","richtigesDatum","block","id-db"};
3402 machevec.add(Boolean.valueOf(false));
3403 machevec.add(null);
3404 machevec.add(DatFunk.WochenTag(sdatum).substring(0,2)+"-"+sdatum);
3405 machevec.add(uhrzeit.substring(0,5));
3406 machevec.add(rs.getString("TE"+(ii)).trim().substring(0,5));
3407 machevec.add(rs.getString("TD"+(ii)).trim());
3408 machevec.add(rs.getString("TS"+(ii)).trim().substring(0,5));
3409 machevec.add((defdauer == -1 ? rs.getString("TD"+(ii)).trim() : Integer.toString(defdauer) ) );
3410 machevec.add(name);
3411 machevec.add(nummer);
3412 machevec.add(skollege);
3413 machevec.add("");
3414 machevec.add(""); //fr�her sorter
3415 machevec.add(rs.getString("BEHANDLER"));
3416 machevec.add(sdatum);
3417 machevec.add(sorigdatum);
3418 machevec.add(ii);
3419 machevec.add(rs.getString("id"));
3420 machevec.add(rs.getString("BELEGT"));
3421 machevec.add(Boolean.valueOf(false));
3423 return (Vector<Object>)machevec.clone();
3426 private Vector<Object> macheKGGVector(ResultSet rs,String name,String nummer,String skollege,int ikollege,int ii,int defdauer) throws SQLException{
3427 machevec.clear();
3428 machevec.trimToSize();
3429 //Vector vec = new Vector();
3430 String uhrzeit;
3431 String sorigdatum;
3432 String sdatum;
3434 uhrzeit = rs.getString("TS"+(ii));
3436 sorigdatum = rs.getString(305);
3437 sdatum = DatFunk.sDatInDeutsch(sorigdatum);
3438 skollege = (String) ParameterLaden.getKollegenUeberReihe(ikollege);
3439 //{"x?","G!","Datum","Beginn","Ende","Min.","Namen","Rez.Nr.","Behandler","Druckzeit","Sort","Spalte","richtigesDatum","block","id-db"};
3440 machevec.add(Boolean.valueOf(false));
3441 machevec.add(null);
3442 machevec.add(DatFunk.WochenTag(sdatum).substring(0,2)+"-"+sdatum);
3443 machevec.add(uhrzeit.substring(0,5));
3444 machevec.add(rs.getString("TE"+(ii)).trim().substring(0,5));
3445 machevec.add(rs.getString("TD"+(ii)).trim());
3446 machevec.add(rs.getString("TS"+(ii)).trim().substring(0,5));
3447 machevec.add((defdauer == -1 ? rs.getString("TD"+(ii)).trim() : Integer.toString(defdauer) ) );
3448 machevec.add(name);
3449 machevec.add(nummer);
3450 machevec.add(skollege);
3451 machevec.add(rs.getString("TS"+(ii)).trim().substring(0,2)+":00");
3452 machevec.add(skollege); //früher sorter
3453 machevec.add(rs.getString("BEHANDLER"));
3454 machevec.add(sdatum);
3455 machevec.add(sorigdatum);
3456 machevec.add(ii);
3457 machevec.add(rs.getString("id"));
3458 machevec.add(rs.getString("BELEGT"));
3459 machevec.add(Boolean.valueOf(false));
3461 return (Vector<Object>)machevec.clone();
3464 private Vector<Object> macheGruppenVector(ResultSet rs,String name,String nummer,String skollege,int ikollege,int ii,int defdauer,Vector vecgruppe,boolean suchleer) throws SQLException{
3466 machevec.clear();
3467 machevec.trimToSize();
3468 //Vector vec = new Vector();
3469 String uhrzeit;
3470 String sorigdatum;
3471 String sdatum;
3473 uhrzeit = rs.getString("TS"+(ii));
3475 sorigdatum = rs.getString(305);
3476 sdatum = DatFunk.sDatInDeutsch(sorigdatum);
3477 skollege = (String) ParameterLaden.getKollegenUeberReihe(ikollege);
3478 //{"x?","G!","Datum","Beginn","Ende","Min.","Namen","Rez.Nr.","Behandler","Druckzeit","Sort","Spalte","richtigesDatum","block","id-db"};
3479 machevec.add(Boolean.valueOf(false));
3480 machevec.add(null);
3481 machevec.add(DatFunk.WochenTag(sdatum).substring(0,2)+"-"+sdatum);
3482 machevec.add(uhrzeit.substring(0,5));
3483 machevec.add(rs.getString("TE"+(ii)).trim().substring(0,5));
3484 machevec.add(rs.getString("TD"+(ii)).trim());
3485 machevec.add(rs.getString("TS"+(ii)).trim().substring(0,5));
3486 machevec.add(Integer.toString(defdauer));
3487 boolean xgruppe = false;
3488 //if(name.trim().equals("")){
3489 String snam = null;
3490 if(((String)vecgruppe.get(3)).toUpperCase().contains("@BEHANDLER")){
3491 /******** hier noch das handling f�r Teile des Namens anzeigen *******/
3492 if(name.length() >= 5){
3493 snam = name.substring(0,5)+"\\\\"+((String)vecgruppe.get(3)).split("@")[0]+"-"+vecgruppe.get(4)+"Min.";
3494 }else{
3495 snam = ((String)vecgruppe.get(3)).split("@")[0]+"-"+vecgruppe.get(4)+"Min.";
3497 xgruppe = true;
3498 }else{
3499 if(name.length() >= 5){
3500 snam = name.substring(0,5)+"\\\\"+vecgruppe.get(3)+"-"+vecgruppe.get(4)+"Min.";
3501 }else{
3502 snam = vecgruppe.get(3)+"-"+vecgruppe.get(4)+"Min.";
3506 machevec.add(snam);
3507 //}else{
3508 //vec.add(name);
3510 machevec.add(nummer);
3511 machevec.add(skollege);
3512 String drzeit = (String)vecgruppe.get(2);
3513 machevec.add((drzeit.trim().equals("00:00") ? "--:--" : vecgruppe.get(2)));
3514 machevec.add((xgruppe ? skollege : "")); //fr�her sorter
3515 machevec.add(rs.getString("BEHANDLER"));
3516 machevec.add(sdatum);
3517 machevec.add(sorigdatum);
3518 machevec.add(ii);
3519 machevec.add(rs.getString("id"));
3520 machevec.add(rs.getString("BELEGT"));
3521 machevec.add(Boolean.valueOf(true));
3523 return (Vector<Object>)machevec.clone();
3528 /**********************************************************************/
3529 /**********************************************************************/
3530 /**********************************************************************/
3531 private synchronized int XSperrenVerarbeiten(int akt,Vector vecx,String zeit){
3532 Statement stmtx = null;
3533 ResultSet rsx = null;
3536 try {
3537 Reha.thisClass.conn.setAutoCommit(true);
3538 } catch (SQLException e1) {
3539 // TODO Auto-generated catch block
3540 e1.printStackTrace();
3543 try{
3546 String sperre;
3547 sperre = (String)((Vector)vecx).get(13)+
3548 (String)((Vector)vecx).get(14) ;
3550 //if(! sperrDatum.contains(sperre+SystemConfig.dieseMaschine)){
3551 stmtx = null;
3552 rsx = null;
3553 try {
3554 stmtx = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
3555 ResultSet.CONCUR_UPDATABLE );
3557 } catch (SQLException e) {
3558 // TODO Auto-generated catch block
3559 e.printStackTrace();
3561 try {
3562 rsx = stmtx.executeQuery("select sperre,maschine from flexlock where sperre='"+sperre+"'");
3563 if(!rsx.next() ){
3564 //this.sperrDatum.add(sperre+SystemConfig.dieseMaschine+zeit);
3565 String st = "insert into flexlock set sperre='"+sperre+"', maschine='"+SystemConfig.dieseMaschine+"', "+
3566 "zeit='"+zeit+"'";
3567 stmtx.execute(st);
3568 //new ExUndHop().setzeStatement(String.valueOf(st));
3570 try {
3571 Thread.sleep(10);
3572 } catch (InterruptedException e) {
3573 // TODO Auto-generated catch block
3574 e.printStackTrace();
3577 return(0);
3578 }else{
3579 return(1);
3581 if(! sperrDatum.contains(sperre+SystemConfig.dieseMaschine+SuchenSeite.getZeit())){
3582 return(1);
3583 }else{
3584 return(0);
3589 } catch (SQLException e) {
3590 // TODO Auto-generated catch block
3591 e.printStackTrace();
3598 if (rsx != null) {
3599 try {
3600 rsx.close();
3601 } catch (SQLException sqlEx) { // ignore }
3602 rsx = null;
3605 if (stmtx != null) {
3606 try {
3607 stmtx.close();
3608 } catch (SQLException sqlEx) { // ignore }
3609 stmtx = null;
3612 }catch(Exception ex){
3613 ex.printStackTrace();
3616 return 0;
3619 private synchronized void malen(ImageIcon bild,int wo){
3620 dtblm.setValueAt(bild, wo, 1);
3626 /************************Ende des WorkerThreads************************/
3627 /**********************************************************************/
3628 /**********************************************************************/
3629 /**********************************************************************/
3631 /**********************************************************************/
3634 class MyDefaultTableModel extends DefaultTableModel{
3638 private static final long serialVersionUID = 1L;
3640 public Class getColumnClass(int columnIndex) {
3641 if(columnIndex==0){return Boolean.class;}
3642 /* if(columnIndex==1){return JLabel.class;}*/
3643 else{return String.class;}
3644 //return (columnIndex == 0) ? Boolean.class : String.class;
3647 public boolean isCellEditable(int row, int col) {
3648 //Note that the data/cell address is constant,
3649 //no matter where the cell appears onscreen.
3650 if (col == 0){
3651 return true;
3652 }else if(col == 6){
3653 return true;
3654 }else if(col == 7){
3655 if((Boolean) getValueAt(row,0)){
3656 return true;
3657 }else{
3658 return false;
3660 }else if(col == 11){
3661 return true;
3662 } else{
3663 return false;
3668 /*******************************************************************/
3669 /*******************************************************************/
3670 /**************************************************/
3672 /**************************************************/
3673 /**************************************************/
3674 class WorkerTabelle extends SwingWorker<Void,Void>{
3675 boolean fertig = false;
3676 int aktuell = -1;
3677 public ArrayList<String> sperrDatum = new ArrayList<String>();
3678 private ImageIcon img,img2;
3679 private String zeit;
3680 private int merken = -1;
3682 public void init(){
3683 img = SystemConfig.hmSysIcons.get("zuzahlnichtok");
3684 img2 = SystemConfig.hmSysIcons.get("zuzahlfrei");
3685 img.setDescription("gesperrt");
3686 img2.setDescription("offen");
3687 setZeit();
3688 zeit = getZeit();
3689 sperrDatum.clear();
3691 public void setEnde(){
3692 fertig = true;
3695 protected Void doInBackground() throws Exception {
3696 int anzahl;
3697 int verarbeitet;
3698 sperrDatum.clear();
3699 Vector nvec;
3700 String sperre;
3701 try{
3702 while(true){
3704 anzahl = sucheDaten.size();
3705 if( (SuchenSeite.mussUnterbrechen) && (anzahl==0) && (getTreffer()==anzahl) ){
3706 break;
3708 if( (SuchenSeite.mussUnterbrechen) && (anzahl==(aktuell+1)) && (aktuell==(getTreffer()-1)) ){
3709 break;
3713 if(anzahl > 0){
3714 if(aktuell != (anzahl-1)){
3716 aktuell++;
3717 SuchenSeite.verarbeitetLbl.setText(Integer.toString(aktuell+1));
3718 nvec = (Vector) ((Vector)sucheDaten.get(aktuell));//.clone();
3719 sperre = (String)((Vector)nvec).get(13)+
3720 (String)((Vector)nvec).get(14) ;
3722 if(sperrDatum.contains(sperre+SystemConfig.dieseMaschine+zeit)){
3723 nvec.set(1, img2);
3724 }else{
3725 //int ret = 0;
3726 int ret = XSperrenVerarbeiten(aktuell,nvec,zeit);
3727 if(ret==0){
3728 sperrDatum.add(sperre+SystemConfig.dieseMaschine+zeit);
3730 nvec.set(1, (ret==0 ? img2 : img));
3732 dtblm.addRow(nvec);
3733 new Thread(){
3734 public void run(){
3735 jxSucheTable.validate();
3737 }.start();
3738 if( (SuchenSeite.mussUnterbrechen) && (anzahl==(aktuell+1)) && (aktuell==(getTreffer()-1)) ){
3739 break;
3744 if( (SuchenSeite.mussUnterbrechen)
3745 && (anzahl==(aktuell+1))
3746 && (aktuell==(getTreffer()-1))
3747 && (getTreffer()==anzahl) ){
3748 break;
3753 }catch(Exception ex){
3754 ex.printStackTrace();
3757 setWorkerFertig(true);
3758 nvec = null;
3759 sperre = null;
3760 return null;
3762 /************************/
3763 private int XSperrenVerarbeiten(int akt,Vector<String> vecx,String zeit){
3764 Statement stmtx = null;
3765 ResultSet rsx = null;
3766 boolean neu = true;
3768 String sperre;
3769 sperre = (String)((Vector<String>)vecx).get(13)+
3770 (String)((Vector<String>)vecx).get(14) ;
3772 if(neu){
3773 String cmd = "sperre='"+sperre+"'";
3774 if(SqlInfo.zaehleSaetze("flexlock", cmd)==0){
3775 cmd = "insert into flexlock set sperre='"+sperre+"', maschine='"+SystemConfig.dieseMaschine+"', "+
3776 "zeit='"+zeit+"'";
3777 //SqlInfo.sqlAusfuehren(cmd);
3778 new ExUndHop().setzeStatement(cmd);
3779 return(0);
3780 }else{
3781 return(1);
3786 //if(! sperrDatum.contains(sperre+SystemConfig.dieseMaschine)){
3787 stmtx = null;
3788 rsx = null;
3789 try {
3790 stmtx = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
3791 ResultSet.CONCUR_UPDATABLE );
3793 } catch (SQLException e) {
3794 // TODO Auto-generated catch block
3795 e.printStackTrace();
3797 try {
3798 rsx = stmtx.executeQuery("select sperre,maschine from flexlock where sperre='"+sperre+"' LIMIT 1");
3799 if(!rsx.next() ){
3800 //this.sperrDatum.add(sperre+SystemConfig.dieseMaschine+zeit);
3801 String st = "insert into flexlock set sperre='"+sperre+"', maschine='"+SystemConfig.dieseMaschine+"', "+
3802 "zeit='"+zeit+"'";
3803 stmtx.execute(st);
3804 //new ExUndHop().setzeStatement(String.valueOf(st));
3805 try {
3806 Thread.sleep(10);
3807 } catch (InterruptedException e) {
3808 // TODO Auto-generated catch block
3809 e.printStackTrace();
3811 return(0);
3812 }else{
3813 return(1);
3815 if(! sperrDatum.contains(sperre+SystemConfig.dieseMaschine+SuchenSeite.getZeit())){
3816 return(1);
3817 }else{
3818 return(0);
3823 } catch (SQLException e) {
3824 // TODO Auto-generated catch block
3825 e.printStackTrace();
3832 if (rsx != null) {
3833 try {
3834 rsx.close();
3835 rsx = null;
3836 } catch (SQLException sqlEx) { // ignore }
3837 rsx = null;
3840 if (stmtx != null) {
3841 try {
3842 stmtx.close();
3843 stmtx = null;
3844 } catch (SQLException sqlEx) { // ignore }
3845 stmtx = null;
3849 return 0;
3854 /**************************************************/
3855 class WorkerTabelle2 extends SwingWorker<Void,Void>{
3856 boolean fertig = false;
3857 int aktuell = -1;
3858 public ArrayList<String> sperrDatum = new ArrayList<String>();
3859 private ImageIcon img,img2;
3860 private String zeit;
3861 private int merken = -1;
3863 public void init(){
3864 img = SystemConfig.hmSysIcons.get("zuzahlnichtok");
3865 img2 = SystemConfig.hmSysIcons.get("zuzahlfrei");
3866 img.setDescription("gesperrt");
3867 img2.setDescription("offen");
3868 setZeit();
3869 zeit = getZeit();
3870 sperrDatum.clear();
3872 public void setEnde(){
3873 fertig = true;
3876 protected Void doInBackground() throws Exception {
3877 int anzahl;
3878 int verarbeitet;
3879 sperrDatum.clear();
3880 //Vector nvec;
3881 String sperre;
3882 while(true){
3883 anzahl = dtblm.getRowCount();
3884 if( (SuchenSeite.mussUnterbrechen) && (anzahl==0) && (getTreffer()==anzahl) ){
3885 break;
3887 if( (SuchenSeite.mussUnterbrechen) && (anzahl==(aktuell+1)) && (aktuell==(getTreffer()-1)) ){
3888 break;
3892 if(anzahl > 0){
3893 if(aktuell != (anzahl-1)){
3895 aktuell++;
3896 SuchenSeite.verarbeitetLbl.setText(Integer.toString(aktuell+1));
3897 sperre = (String)dtblm.getValueAt(aktuell,13)+
3898 dtblm.getValueAt(aktuell,14) ;
3899 if(sperrDatum.contains(sperre+SystemConfig.dieseMaschine+zeit)){
3900 //dtblm.setValueAt(img2,aktuell,1) ;
3901 }else{
3902 //int ret = 0;
3903 int ret = XSperrenVerarbeiten(aktuell,sperre,zeit);
3904 if(ret==0){
3905 sperrDatum.add(sperre+SystemConfig.dieseMaschine+zeit);
3906 }else{
3907 dtblm.setValueAt(img,aktuell,1);
3912 if( (SuchenSeite.mussUnterbrechen) && (anzahl==(aktuell+1)) && (aktuell==(getTreffer()-1)) ){
3913 break;
3918 if( (SuchenSeite.mussUnterbrechen)
3919 && (anzahl==(aktuell+1))
3920 && (aktuell==(getTreffer()-1))
3921 && (getTreffer()==anzahl) ){
3922 break;
3927 setWorkerFertig(true);
3928 //nvec = null;
3929 sperre = null;
3930 img = null;
3931 img2 = null;
3932 return null;
3934 /************************/
3935 private int XSperrenVerarbeiten(int akt,String xsperre,String zeit){
3936 Statement stmtx = null;
3937 ResultSet rsx = null;
3938 boolean neu = true;
3940 String sperre = xsperre;
3941 if(neu){
3942 String cmd = "sperre='"+sperre+"'";
3943 if(SqlInfo.zaehleSaetze("flexlock", cmd)==0){
3944 cmd = "insert into flexlock set sperre='"+sperre+"', maschine='"+SystemConfig.dieseMaschine+"', "+
3945 "zeit='"+zeit+"'";
3946 SqlInfo.sqlAusfuehren(cmd);
3947 //new ExUndHop().setzeStatement(cmd);
3948 return(0);
3949 }else{
3950 return(1);
3954 return 0;
3960 /**************************************************/
3966 class TermObjekt implements Comparable<TermObjekt>{
3967 public String tag;
3968 public String beginn;
3969 public String termtext;
3970 public String sorter;
3971 public String dauer;
3973 public TermObjekt(String xtag,String xbeginn,String xtermtext,String xsorter,String xdauer){
3974 this.tag = xtag;
3975 this.beginn = xbeginn;
3976 this.termtext =xtermtext;
3977 this.sorter = xsorter;
3978 this.dauer = xdauer;
3982 @Override
3983 public int compareTo(TermObjekt o) {
3984 //First order by name
3985 int result = sorter.compareTo(o.sorter);
3986 if (0 == result) {
3987 //if names are equal order by age, youngest first
3988 result = termtext.compareTo(o.termtext);
3990 return result;
3996 class Rdaten extends Observable{
3997 public Vector<String> rvec;
3998 public Rdaten(){
3999 super();
4000 rvec = new Vector<String>();
4004 class EntsperreSatz extends Thread implements Runnable{
4005 private SuchenSeite eltern;
4006 public void setzeEltern(SuchenSeite xeltern){
4007 this.eltern = xeltern;
4009 public void run(){
4010 Statement stmt = null;
4012 try {
4013 stmt = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
4014 ResultSet.CONCUR_UPDATABLE );
4015 } catch (SQLException e) {
4016 e.printStackTrace();
4018 try {
4019 if(this.eltern == null){
4020 //System.out.println("this.eltern.getZeit() == NULL");
4022 stmt.execute("delete from flexlock where maschine='"+SystemConfig.dieseMaschine+"' AND zeit='"+this.eltern.getZeit()+"'");
4023 } catch (SQLException e) {
4024 e.printStackTrace();
4026 finally {
4027 if (stmt != null) {
4028 try {
4029 stmt.close();
4030 stmt = null;
4031 } catch (SQLException sqlEx) { // ignore }
4032 stmt = null;