*** empty log message ***
[thera-pi.git] / Reha / src / roogle / TerminplanDrucken.java
blob5a669ecf2bd29627b89d794e4bb4167bce1807f5
1 package roogle;
3 import hauptFenster.Reha;
5 import java.io.File;
6 import java.io.FileNotFoundException;
7 import java.io.FileReader;
8 import java.io.IOException;
9 import java.sql.ResultSet;
10 import java.sql.SQLException;
11 import java.sql.Statement;
12 import java.util.ArrayList;
13 import java.util.Vector;
15 import javax.swing.JOptionPane;
17 import org.jdesktop.swingworker.SwingWorker;
19 import systemEinstellungen.SystemConfig;
20 import ag.ion.bion.officelayer.application.OfficeApplicationException;
21 import ag.ion.bion.officelayer.document.DocumentDescriptor;
22 import ag.ion.bion.officelayer.document.DocumentException;
23 import ag.ion.bion.officelayer.document.IDocument;
24 import ag.ion.bion.officelayer.document.IDocumentDescriptor;
25 import ag.ion.bion.officelayer.document.IDocumentService;
26 import ag.ion.bion.officelayer.filter.PDFFilter;
27 import ag.ion.bion.officelayer.text.ITextDocument;
28 import ag.ion.bion.officelayer.text.ITextField;
29 import ag.ion.bion.officelayer.text.ITextFieldService;
30 import ag.ion.bion.officelayer.text.ITextTable;
31 import ag.ion.bion.officelayer.text.TextException;
32 import ag.ion.noa.NOAException;
33 import ag.ion.noa.printing.IPrinter;
34 import emailHandling.EmailSendenExtern;
40 public class TerminplanDrucken extends Thread implements Runnable {
41 private Vector<TermObjekt> termindat = null;
42 private boolean ldrucken;
43 private String patient;
44 private String rezept;
45 public int seiten = 1;
46 TerminplanDrucken thisDruck = null;
47 String[] tabName;
48 static String exporturl = "";
49 SuchenSeite eltern;
50 public void init(Vector<TermObjekt> termdat,boolean drucken,String patName,String rezNr,SuchenSeite xeltern){
51 this.termindat = termdat;
52 this.ldrucken = drucken;
53 this.patient = patName;
54 this.rezept = rezNr;
55 eltern = xeltern;
56 thisDruck = this;
57 start();
60 public synchronized void run() {
61 String url = Reha.proghome+"vorlagen/"+Reha.aktIK+"/"+SystemConfig.oTerminListe.NameTemplate;
62 //String url = Reha.proghome+"vorlagen/"+SystemConfig.oTerminListe.NameTemplate;
63 ////System.out.println("***************URL = "+url+"****************");
64 String terminDrucker = SystemConfig.oTerminListe.NameTerminDrucker;
65 int anzahl = termindat.size();
66 int AnzahlTabellen = SystemConfig.oTerminListe.AnzahlTerminTabellen;
67 int maxTermineProTabelle = SystemConfig.oTerminListe.AnzahlTermineProTabelle;
68 int maxTermineProSeite = AnzahlTabellen * maxTermineProTabelle;
69 //int spaltenProtabelle = SystemConfig.oTerminListe.AnzahlSpaltenProTabellen;
70 Vector<String> spaltenNamen = SystemConfig.oTerminListe.NamenSpalten;
71 int ipatdrucken = SystemConfig.oTerminListe.PatNameDrucken;
72 int iheader = SystemConfig.oTerminListe.MitUeberschrift;
73 //String patplatzhalter = SystemConfig.oTerminListe.PatNamenPlatzhalter;
75 //int anzahl = oOTermine.size();
76 String patname = (patient.indexOf("?")>=0 ? patient.substring(1).trim() : patient.trim());
77 String rez = (rezept.trim().equals("") ? "" : " - "+rezept.trim());
78 patname = patname+rez;
80 /**********/
81 eltern.getFortschritt().setStringPainted(true);
82 //eltern.getFortschritt().setIndeterminate(true);
83 eltern.setFortschrittZeigen(true);
84 eltern.setFortschrittRang(0, Long.valueOf(Integer.toString(termindat.size())));
85 eltern.setFortschrittSetzen(0);
86 //eltern.setFortschrittZeigen(true);
87 /**********/
89 IDocumentService documentService = null;;
90 if(!Reha.officeapplication.isActive()){
91 Reha.starteOfficeApplication();
93 try{
94 documentService = Reha.officeapplication.getDocumentService();
96 } catch (OfficeApplicationException e) {
97 e.printStackTrace();
98 JOptionPane.showMessageDialog(null,"Fehler im OpenOffice-System, Terminplan kann nicht gedruckt werden");
101 IDocumentDescriptor docdescript = new DocumentDescriptor();
102 docdescript.setHidden(true);
103 docdescript.setAsTemplate(true);
104 IDocument document = null;
105 ITextTable[] tbl = null;
107 try {
108 document = documentService.loadDocument(url,docdescript);
110 } catch (NOAException e) {
111 // TODO Auto-generated catch block
112 e.printStackTrace();
114 /**********************/
115 ITextDocument textDocument = (ITextDocument)document;
116 tbl = textDocument.getTextTableService().getTextTables();
118 if(tbl.length != AnzahlTabellen){
119 JOptionPane.showMessageDialog (null, "Anzahl Tabellen stimmt nicht mit der Vorlagen.ini überein.\nDruck nicht m�glich");
120 textDocument.close();
121 eltern.cursorWait(false);
122 return;
124 tabName = new String[AnzahlTabellen];
125 int x = 0;
126 for(int i=AnzahlTabellen;i>0;i--){
127 tabName[x] = tbl[(tbl.length-1)-x].getName();
128 ////System.out.println(tabName[x]);
129 x++;
131 /*********************/
133 //Aktuellen Drucker ermitteln
134 String druckerName = null;
135 try {
136 druckerName = textDocument.getPrintService().getActivePrinter().getName();
137 } catch (NOAException e) {
138 // TODO Auto-generated catch block
139 e.printStackTrace();
141 //Wenn nicht gleich wie in der INI angegeben -> Drucker wechseln
142 IPrinter iprint = null;
143 if(! druckerName.equals(terminDrucker)){
144 try {
145 iprint = (IPrinter) textDocument.getPrintService().createPrinter(terminDrucker);
146 } catch (NOAException e) {
147 // TODO Auto-generated catch block
148 e.printStackTrace();
150 try {
151 textDocument.getPrintService().setActivePrinter(iprint);
152 } catch (NOAException e) {
153 // TODO Auto-generated catch block
154 e.printStackTrace();
157 //Jetzt den Platzhalter ^Name^ suchen
158 //SearchDescriptor searchDescriptor = null;
159 //ISearchResult searchResult = null;
160 if(ipatdrucken > 0){
161 ITextFieldService textFieldService = textDocument.getTextFieldService();
162 ITextField[] placeholders = null;
163 try {
164 placeholders = textFieldService.getPlaceholderFields();
165 } catch (TextException e) {
166 // TODO Auto-generated catch block
167 e.printStackTrace();
169 for (int i = 0; i < placeholders.length; i++) {
170 String placeholderDisplayText = placeholders[i].getDisplayText();
171 ////System.out.println("Platzhalter-Name = "+placeholderDisplayText);
172 if(placeholderDisplayText.equals("<^Name^>")){
173 placeholders[i].getTextRange().setText(patname);
178 /********************************************/
179 //int zeile = 0;
180 //int startTabelle = 0;
181 int aktTabelle = 0;
182 int aktTermin = -1;
183 int aktTerminInTabelle = -1;
184 String druckDatum = "";
185 ITextTable textTable = null;
186 try {
187 textTable = textDocument.getTextTableService().getTextTable(tabName[aktTabelle]);
188 } catch (TextException e) {
189 e.printStackTrace();
191 int zaehler = 0;
192 while(true){
194 aktTerminInTabelle = aktTerminInTabelle+1;
195 aktTermin = aktTermin+1;
196 eltern.setFortschrittSetzen(aktTermin);
197 if(aktTermin >= anzahl){
198 break;
200 /***********Wenn die Spalte voll ist und die aktuelle Tabelle nicht die letzte ist*/
201 if(aktTerminInTabelle >= maxTermineProTabelle && aktTabelle < AnzahlTabellen-1 ){
202 aktTabelle = aktTabelle+1;
203 try {
204 textTable = textDocument.getTextTableService().getTextTable(tabName[aktTabelle]);
205 } catch (TextException e) {
206 e.printStackTrace();
208 aktTerminInTabelle = 0;
209 ////System.out.println("Spaltenwechsel nach Spalte"+aktTabelle);
212 /************Wenn die aktuelle Seite voll ist******************/
213 if(aktTermin >= maxTermineProSeite && aktTerminInTabelle==maxTermineProTabelle){
215 textDocument.getViewCursorService().getViewCursor().getPageCursor().jumpToEndOfPage();
216 try {
217 textDocument.getViewCursorService().getViewCursor().getTextCursorFromEnd().insertPageBreak();
218 textDocument.getViewCursorService().getViewCursor().getTextCursorFromEnd().insertDocument(url) ;
219 } catch (NOAException e) {
220 e.printStackTrace();
222 tbl = textDocument.getTextTableService().getTextTables();
223 x = 0;
224 for(int i=AnzahlTabellen;i>0;i--){
225 tabName[x] = tbl[(tbl.length-1)-x].getName();
226 x++;
229 if(ipatdrucken > 0){
230 ITextFieldService textFieldService = textDocument.getTextFieldService();
231 ITextField[] placeholders = null;
232 try {
233 placeholders = textFieldService.getPlaceholderFields();
234 } catch (TextException e) {
235 e.printStackTrace();
237 for (int i = 0; i < placeholders.length; i++) {
238 String placeholderDisplayText = placeholders[i].getDisplayText();
239 if(placeholderDisplayText.equals("<^Name^>")){
240 placeholders[i].getTextRange().setText(patname);
246 aktTabelle = 0;
247 aktTerminInTabelle = 0;
249 try {
250 textTable = textDocument.getTextTableService().getTextTable(tabName[aktTabelle]);
251 } catch (TextException e) {
252 // TODO Auto-generated catch block
253 e.printStackTrace();
256 /********************/
257 //**************/Hier die Zellen*************//
258 if(spaltenNamen.contains("Wochentag")){
259 int zelle = spaltenNamen.indexOf("Wochentag");
261 druckDatum = termindat.get(aktTermin).tag;
262 if(aktTerminInTabelle > 0){
263 if(! druckDatum.equals(termindat.get(aktTermin-1).tag)){
264 try {
265 textTable.getCell(zelle,aktTerminInTabelle+iheader).getTextService().getText().setText(druckDatum.substring(0,2) );
266 } catch (TextException e) {
267 e.printStackTrace();
270 }else{
271 try {
272 textTable.getCell(zelle,aktTerminInTabelle+iheader).getTextService().getText().setText(druckDatum.substring(0,2) );
273 } catch (TextException e) {
274 e.printStackTrace();
278 try {
279 if(spaltenNamen.indexOf("Datum") > 0){
280 int zelle = spaltenNamen.indexOf("Datum");
281 textTable.getCell(zelle,aktTerminInTabelle+iheader).getTextService().getText().setText(druckDatum.substring(3) );
283 if(spaltenNamen.indexOf("Uhrzeit") > 0){
284 int zelle = spaltenNamen.indexOf("Uhrzeit");
285 textTable.getCell(zelle,aktTerminInTabelle+iheader).getTextService().getText().setText(termindat.get(aktTermin).beginn);
287 if(spaltenNamen.indexOf("Behandler") > 0){
288 int zelle = spaltenNamen.indexOf("Behandler");
289 textTable.getCell(zelle,aktTerminInTabelle+iheader).getTextService().getText().setText(termindat.get(aktTermin).termtext);
292 } catch (TextException e) {
293 e.printStackTrace();
296 /********************/
297 try {
298 zaehler+=1;
299 if(zaehler >= 50){
300 Thread.sleep(25);
301 zaehler=0;
304 } catch (InterruptedException e) {
305 e.printStackTrace();
308 // Jetzt das fertige Dokument drucken, bzw. als PDF aufbereiten;
310 /********************************************/
311 if (ldrucken){
313 try {
314 final ITextDocument xdoc = textDocument;
315 if(SystemConfig.oTerminListe.DirektDruck){
316 //System.out.println("vor print()");
317 xdoc.print();
318 Thread.sleep(150);
319 //System.out.println("vor close()");
320 xdoc.close();
321 //System.out.println("nach close()");
322 //eltern.setFortschrittSetzen(termindat.size()+(termindat.size()/20));
324 new SwingWorker<Void,Void>(){
325 @Override
326 protected Void doInBackground()
327 throws Exception {
328 System.out.println("vor print()");
329 try {
330 xdoc.print();
331 //textDocument.print();
332 Thread.sleep(150);
333 }catch (InterruptedException e) {
334 e.printStackTrace();
335 } catch(NullPointerException ex){
336 ex.printStackTrace();
338 System.out.println("vor close()");
339 xdoc.close();
340 //textDocument.close();
341 return null;
343 }.execute();
345 eltern.setFortschrittSetzen(termindat.size());
346 eltern.setFortschrittZeigen(false);
347 eltern.getFortschritt().setStringPainted(true);
348 this.termindat = null;
349 eltern.cursorWait(false);
350 }else{
351 eltern.cursorWait(false);
352 eltern.setFortschrittZeigen(false);
353 eltern.getFortschritt().setStringPainted(true);
354 this.termindat = null;
355 document.getFrame().getXFrame().getContainerWindow().setVisible(true);
359 } catch (Exception e) {
360 // TODO Auto-generated catch block
361 e.printStackTrace();
363 }else{
365 exporturl = Reha.proghome+"temp/"+Reha.aktIK+"/Terminplan.pdf";
366 File f = new File(exporturl);
367 if(f.exists()){
368 f.delete();
370 try {
371 Thread.sleep(50);
372 textDocument.getPersistenceService().export(exporturl, new PDFFilter());
373 } catch (DocumentException e) {
374 e.printStackTrace();
375 JOptionPane.showMessageDialog(null, "Fehler bei der Aufbereitung des Terminplanes als PDF für Emailversand\nFehler: "+e.getMessage());
376 } catch (InterruptedException e) {
377 e.printStackTrace();
378 JOptionPane.showMessageDialog(null, "Fehler bei der Aufbereitung des Terminplanes als PDF für Emailversand\nFehler: "+e.getMessage());
381 // Anschließend die Vorlagendatei schließen
382 //textDocument.close();
383 if(!ldrucken){
384 final ITextDocument xdoc = textDocument;
385 new SwingWorker<Void,Void>(){
386 @Override
387 protected Void doInBackground()
388 throws Exception {
389 try {
390 Thread.sleep(50);
391 xdoc.close();
392 sendeEmail();
393 } catch (InterruptedException e) {
394 e.printStackTrace();
395 JOptionPane.showMessageDialog(null, "Fehler beim Senden und Schließen des Terminplanes\nFehler: "+e.getMessage());
396 } catch(Exception ex){
397 JOptionPane.showMessageDialog(null, "Fehler beim Senden und Schließen des Terminplanes\nFehler: "+ex.getMessage());
399 //textDocument.close();
401 return null;
403 }.execute();
405 eltern.setFortschrittZeigen(false);
406 eltern.getFortschritt().setStringPainted(true);
407 this.termindat = null;
410 eltern.cursorWait(false);
413 private void sendeEmail(){
414 String emailaddy=null,pat_intern=null;
415 if(this.rezept.trim().equals("")){
416 emailaddy = JOptionPane.showInputDialog (null, "Bitte geben Sie eine gültige Email-Adresse ein");
417 try{
418 if(emailaddy.equals("")){
419 return;
421 }catch(java.lang.NullPointerException ex){
422 return;
424 }else{
425 String trailing = null;
426 if(this.rezept.trim().contains("\\")){
427 trailing = this.rezept.substring(0,this.rezept.indexOf("\\"));
428 }else{
429 trailing = this.rezept.trim();
431 pat_intern = holeAusDB("select PAT_INTERN from verordn where REZ_NR ='"+trailing+"'");
432 if(pat_intern.equals("")){
433 emailaddy = JOptionPane.showInputDialog (null, "Bitte geben Sie eine gültige Email-Adresse ein");
434 try{
435 if(emailaddy.equals("")){
436 return;
438 }catch(java.lang.NullPointerException ex){
439 return;
441 }else{
442 emailaddy = holeAusDB("select EMAILA from pat5 where PAT_INTERN ='"+pat_intern+"'");
443 if(emailaddy.equals("")){
444 emailaddy = JOptionPane.showInputDialog(null,"Bitte geben Sie eine gültige Email-Adresse ein" , emailaddy);
445 try{
446 if(emailaddy.equals("")){
447 return;
449 }catch(java.lang.NullPointerException ex){
450 return;
452 }else{
453 emailaddy = JOptionPane.showInputDialog(null,"Soll diese Emailadresse verwendet werden?" , emailaddy);
457 /*****************bis hierher lediglich Emailadressen gewurschtel**************************/
458 ArrayList<String[]> attachments = new ArrayList<String[]>();
459 String[] anhang = {null,null};
460 anhang[0] = Reha.proghome+"temp/"+Reha.aktIK+"/Terminplan.pdf";
461 anhang[1] = "Terminplan.pdf";
462 attachments.add(anhang.clone());
464 String username = SystemConfig.hmEmailExtern.get("Username");
465 String password = SystemConfig.hmEmailExtern.get("Password");
466 String senderAddress =SystemConfig.hmEmailExtern.get("SenderAdresse");
467 String secure = SystemConfig.hmEmailExtern.get("SmtpSecure");
468 String recipientsAddress = emailaddy;
469 String subject = "Ihre Behandlungstermine";
470 boolean authx = (SystemConfig.hmEmailExtern.get("SmtpAuth").equals("0") ? false : true);
471 boolean bestaetigen = (SystemConfig.hmEmailExtern.get("Bestaetigen").equals("0") ? false : true);
472 String text = "";
473 /*********/
474 File file = new File(Reha.proghome+"vorlagen/"+Reha.aktIK+"/EmailTerminliste.txt");
475 try {
476 // FileReader zum Lesen aus Datei
477 FileReader fr = new FileReader(file);
478 // Der String, der am Ende ausgegeben wird
479 String gelesen;
480 // char-Array als Puffer fuer das Lesen. Die
481 // Laenge ergibt sich aus der Groesse der Datei
482 char[] temp = new char[(int) file.length()];
483 // Lesevorgang
484 fr.read(temp);
485 // Umwandlung des char-Arrays in einen String
486 gelesen = String.valueOf(temp);
487 text = gelesen;
488 //Ausgabe des Strings
489 ////System.out.println(gelesen);
490 // Ressourcen freigeben
491 fr.close();
492 } catch (FileNotFoundException e1) {
493 // die Datei existiert nicht
494 System.err.println("Datei nicht gefunden: ");
495 } catch (IOException e2) {
496 // andere IOExceptions abfangen.
497 e2.printStackTrace();
499 /*********/
500 if (text.equals("")){
501 text = "Sehr geehrte Damen und Herren,\n"+
502 "im Dateianhang finden Sie die von Ihnen gew�nschten Behandlungstermine.\n\n"+
503 "Termine die Sie nicht einhalten bzw. wahrnehmen k�nnen, m��en 24 Stunden vorher\n"+
504 "abgesagt werden.\n\nIhr Planungs-Team vom RTA";
506 String smtpHost = SystemConfig.hmEmailExtern.get("SmtpHost");
508 EmailSendenExtern oMail = new EmailSendenExtern();
509 try{
510 oMail.sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text,attachments,authx,bestaetigen,secure);
511 oMail = null;
512 eltern.cursorWait(false);
513 JOptionPane.showMessageDialog (null, "Die Terminliste wurde aufbereitet und per Email versandt\n");
514 }catch(Exception e){
515 eltern.cursorWait(false);
516 JOptionPane.showMessageDialog (null, "Der Emailversand der Terminliste ist fehlgeschlagen!!!!!\n");
517 e.printStackTrace( );
524 private String holeAusDB(String exStatement){
525 Statement stmt = null;
526 ResultSet rs = null;
527 String sergebnis = "";
528 try {
529 stmt = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
530 ResultSet.CONCUR_UPDATABLE );
531 try{
532 rs = (ResultSet) stmt.executeQuery(exStatement);
533 while(rs.next()){
534 sergebnis = (rs.getString(1) == null ? "" : rs.getString(1));
536 }catch(SQLException ev){
537 //System.out.println("SQLException: " + ev.getMessage());
538 //System.out.println("SQLState: " + ev.getSQLState());
539 //System.out.println("VendorError: " + ev.getErrorCode());
542 }catch(SQLException ex) {
543 //System.out.println("von stmt -SQLState: " + ex.getSQLState());
546 finally {
547 if (rs != null) {
548 try {
549 rs.close();
550 } catch (SQLException sqlEx) { // ignore }
551 rs = null;
554 if (stmt != null) {
555 try {
556 stmt.close();
557 } catch (SQLException sqlEx) { // ignore }
558 stmt = null;
563 return sergebnis;