1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.fhw.cabaweb.calculation.timer;
21
22 import java.io.IOException;
23 import java.sql.Time;
24 import java.sql.Date;
25 import java.text.SimpleDateFormat;
26 import java.util.ArrayList;
27 import java.util.Collection;
28 import java.util.Iterator;
29 import java.util.Properties;
30
31 import javax.mail.AuthenticationFailedException;
32 import javax.mail.MessagingException;
33 import javax.mail.SendFailedException;
34 import javax.mail.internet.AddressException;
35
36 import org.apache.commons.logging.Log;
37 import org.apache.commons.logging.LogFactory;
38 import org.apache.struts.util.MessageResources;
39
40 import org.fhw.cabaweb.calculation.ErstelleIndices;
41 import org.fhw.cabaweb.calculation.Startwerte;
42 import org.fhw.cabaweb.calculation.common.CommonCalculation;
43 import org.fhw.cabaweb.calculation.threads.BerechneBewertung;
44 import org.fhw.cabaweb.calculation.threads.BerechneHauptwerte;
45 import org.fhw.cabaweb.calculation.threads.BerechneVollUndGrenzkosten;
46 import org.fhw.cabaweb.calculation.threads.CheckEntscheidungen;
47 import org.fhw.cabaweb.calculation.threads.Lock;
48 import org.fhw.cabaweb.data.DataInterfaceBerechnungsauftraege;
49 import org.fhw.cabaweb.data.DataInterfaceErgebnissdaten;
50 import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenDouble;
51 import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenInteger;
52 import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
53 import org.fhw.cabaweb.data.DataInterfaceProjekte;
54 import org.fhw.cabaweb.data.DataInterfaceProjektgruppen;
55 import org.fhw.cabaweb.data.constants.Constants;
56 import org.fhw.cabaweb.data.dataobjects.Ergebniss;
57 import org.fhw.cabaweb.ojb.dataobjects.Berechnungsauftraege;
58 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
59 import org.fhw.cabaweb.ojb.dataobjects.Projekte;
60 import org.fhw.cabaweb.ojb.dataobjects.Projektgruppen;
61 import org.fhw.cabaweb.tools.MailUtilities;
62 import org.fhw.cabaweb.tools.StringUtilities;
63
64 import org.quartz.Job;
65 import org.quartz.JobExecutionContext;
66 import org.quartz.JobExecutionException;
67
68 /***
69 * Die Klasse ist für die Ausführung der Berechnung durch den QUARTZ Scheduler zuständig.
70 *
71 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
72 * @version Version 1.0 27.08.2004
73 */
74 public final class BerechnungsJob implements Job
75 {
76 /*** Commons Logging Instanz */
77 private static Log log = LogFactory.getLog("org.fhw.cabaweb.calculation.timer.BerechnungsJob");
78
79
80
81
82 public void execute(JobExecutionContext context) throws JobExecutionException
83 {
84 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
85 DataInterfaceBerechnungsauftraege diba = new DataInterfaceBerechnungsauftraege();
86 boolean rueckgabewert = false;
87
88 Date now = new Date(System.currentTimeMillis());
89 SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss.S");
90
91 if (log.isDebugEnabled())
92 {
93 log.debug(" Starte Timer : " + df.format(now));
94 }
95
96 Collection berechnungsauftraege = diba.sucheDatumUhrzeit(new Date(System.currentTimeMillis()), new Time(System.currentTimeMillis()));
97 Iterator berechnungsauftragsiterator = berechnungsauftraege.iterator();
98
99 while (berechnungsauftragsiterator.hasNext())
100 {
101 Berechnungsauftraege berechnungsauftrag = (Berechnungsauftraege) berechnungsauftragsiterator.next();
102 Integer projektnummer = berechnungsauftrag.getProjekte().getProjektnummer();
103 Date datum = berechnungsauftrag.getDatum();
104 Short wiederholung = berechnungsauftrag.getWiederholung();
105 Integer artDerBerechnung = berechnungsauftrag.getArtDerBerechnung();
106
107 berechnungsauftrag.setDatum(new Date(datum.getTime() + (86400000 * wiederholung.longValue())));
108
109 switch (wiederholung.intValue())
110 {
111 case 0 :
112 if (log.isDebugEnabled())
113 {
114 log.debug(" Loeschen des Berechnungsauftrags");
115 }
116
117 rueckgabewert = diba.loeschen(berechnungsauftrag);
118
119 if (rueckgabewert == false)
120 {
121 log.error(MailUtilities.SendErrorMailToAdmin("Loeschen des Berechnungsauftrags fehlgeschlagen (PRJ " + projektnummer + ")", ""));
122 log.error(" Loeschen des Berechnungsauftrags fehlgeschlagen");
123 }
124 break;
125 case 1 :
126 if (log.isDebugEnabled())
127 {
128 log.debug(" Weiterschaltung des Berechnungsauftrags-Datums auf morgen");
129 }
130
131 rueckgabewert = diba.editieren(berechnungsauftrag);
132
133 if (rueckgabewert == false)
134 {
135 log.error(MailUtilities.SendErrorMailToAdmin("Weiterschaltung des Datums auf morgen fehlgeschlagen (PRJ " + projektnummer + ")", ""));
136 log.error(" Weiterschaltung des Datums auf morgen fehlgeschlagen");
137 }
138 break;
139 case 7 :
140 if (log.isDebugEnabled())
141 {
142 log.debug(" Weiterschaltung des Berechnungsauftrags-Datums auf naechste Woche");
143 }
144
145 rueckgabewert = diba.editieren(berechnungsauftrag);
146
147 if (rueckgabewert == false)
148 {
149 log.error(MailUtilities.SendErrorMailToAdmin("Weiterschaltung des Datums auf naechste Woche fehlgeschlagen (PRJ " + projektnummer + ")", ""));
150 log.error(" Weiterschaltung des Datums auf naechste Woche fehlgeschlagen");
151 }
152 break;
153 }
154
155 switch (artDerBerechnung.intValue())
156 {
157 case -99 :
158 ResetQuartalStart(projektnummer);
159 break;
160 case -1 :
161 ResetQuartal(projektnummer);
162 break;
163 case 0 :
164 log.info(" DO NOTHING : " + projektnummer);
165 break;
166 case 1 :
167 BerechneQuartal(projektnummer);
168 break;
169 }
170 }
171
172 if (log.isDebugEnabled())
173 {
174 log.debug(" Berechnungsvorgang abgeschlossen");
175 }
176 }
177
178 /***
179 * Berechnet ein Quartal für die übergebene Projektnummer
180 *
181 * @param projektnummer Die Projektnummer
182 */
183 public synchronized void BerechneQuartal(Integer projektnummer)
184 {
185 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
186 DataInterfaceProjekte dip = new DataInterfaceProjekte();
187 boolean rueckgabewert = false;
188 Projekte projekt = (Projekte) dip.sucheProjektnummer(projektnummer);
189 Integer quartal = projekt.getAktuellesQuartal();
190
191 if (log.isDebugEnabled())
192 {
193 log.debug(" Berechne Quartal " + (quartal.intValue() + 1));
194 }
195
196 DeaktiviereUnternehmen(projektnummer);
197
198 if (quartal.intValue() == -1)
199 {
200 Startwerte.StartwerteEintragen(projektnummer);
201 }
202 else
203 {
204 CheckEntscheidungen(projektnummer, new Integer(quartal.intValue() + 1));
205 }
206
207 ErstelleIndices(projektnummer, new Integer(quartal.intValue() + 1));
208
209 BerechneWerte(projektnummer, quartal);
210
211 projekt.setAktuellesQuartal(new Integer(quartal.intValue() + 1));
212
213 rueckgabewert = dip.editieren(projekt);
214
215 if (rueckgabewert == false)
216 {
217 log.error(MailUtilities.SendErrorMailToAdmin("Weiterschaltung des Quartals fehlgeschlagen (PRJ " + projektnummer + ")", ""));
218 log.error(" Weiterschaltung des Quartals fehlgeschlagen");
219 SendStatusMail(projektnummer, new Integer(quartal.intValue() + 1), 1, false);
220 }
221 else
222 {
223 SendStatusMail(projektnummer, new Integer(quartal.intValue() + 1), 1, true);
224 }
225 }
226
227 /***
228 * Setzt um ein Quartal für die übergebene Projektnummer zurück
229 *
230 * @param projektnummer Die Projektnummer
231 */
232 private synchronized void ResetQuartal(Integer projektnummer)
233 {
234 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
235 DataInterfaceProjekte dip = new DataInterfaceProjekte();
236 boolean rueckgabewert = false;
237 Projekte projekt = (Projekte) dip.sucheProjektnummer(projektnummer);
238 Integer quartal = projekt.getAktuellesQuartal();
239
240 if (log.isDebugEnabled())
241 {
242 log.debug(" Reset Quartal nach " + (quartal.intValue() - 1));
243 }
244
245 if (quartal.intValue() > -1)
246 {
247 quartal = new Integer(quartal.intValue() - 1);
248 }
249
250 projekt.setAktuellesQuartal(quartal);
251
252 rueckgabewert = dip.editieren(projekt);
253
254 if (rueckgabewert == false)
255 {
256 log.error(MailUtilities.SendErrorMailToAdmin("Reset des Quartals fehlgeschlagen (PRJ " + projektnummer + ")", ""));
257 log.error(" Reset des Quartals fehlgeschlagen");
258 SendStatusMail(projektnummer, new Integer(quartal.intValue() + 1), -1, false);
259 }
260 else
261 {
262 SendStatusMail(projektnummer, new Integer(quartal.intValue() + 1), -1, true);
263 }
264 }
265
266 /***
267 * Setzt auf das Quartal -1 für die übergebene Projektnummer zurück
268 *
269 * @param projektnummer Die Projektnummer
270 */
271 private synchronized void ResetQuartalStart(Integer projektnummer)
272 {
273 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
274 DataInterfaceProjekte dip = new DataInterfaceProjekte();
275 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
276 DataInterfaceErgebnissdatenDouble died = new DataInterfaceErgebnissdatenDouble();
277 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
278 DataInterfaceErgebnissdatenInteger diei = new DataInterfaceErgebnissdatenInteger();
279 boolean rueckgabewert = false;
280 Projekte projekt = (Projekte) dip.sucheProjektnummer(projektnummer);
281
282 if (log.isDebugEnabled())
283 {
284 log.debug(" Reset Quartal nach -1");
285 }
286
287 projekt.setAktuellesQuartal(new Integer(-1));
288
289 rueckgabewert = dip.editieren(projekt);
290
291 if (rueckgabewert == false)
292 {
293 log.error(MailUtilities.SendErrorMailToAdmin("Reset des Quartals fehlgeschlagen (PRJ " + projektnummer + ")", ""));
294 log.error(" Reset des Quartals fehlgeschlagen");
295 }
296
297 if (log.isDebugEnabled())
298 {
299 log.debug(" Loeschen der DOUBLE Ergebnisse");
300 }
301
302 Collection ergebnisse = died.sucheKombination(projektnummer, null, null);
303 Iterator ergebnisiterator = ergebnisse.iterator();
304
305 while (ergebnisiterator.hasNext())
306 {
307 rueckgabewert = died.loeschen(ergebnisiterator.next());
308
309 if (rueckgabewert == false)
310 {
311 log.error(MailUtilities.SendErrorMailToAdmin("Loeschen DOUBLE Ergebnis fehlgeschlagen (PRJ " + projektnummer + ")", ""));
312 log.error(" Loeschen DOUBLE Ergebnis fehlgeschlagen");
313 }
314 }
315
316 if (log.isDebugEnabled())
317 {
318 log.debug(" Loeschen der INTEGER Ergebnisse");
319 }
320
321 ergebnisse = diei.sucheKombination(projektnummer, null, null);
322 ergebnisiterator = ergebnisse.iterator();
323
324 while (ergebnisiterator.hasNext())
325 {
326 rueckgabewert = diei.loeschen(ergebnisiterator.next());
327
328 if (rueckgabewert == false)
329 {
330 log.error(MailUtilities.SendErrorMailToAdmin("Loeschen INTEGER Ergebnis fehlgeschlagen (PRJ " + projektnummer + ")", ""));
331 log.error(" Loeschen INTEGER Ergebnis fehlgeschlagen");
332 }
333 }
334
335 Startwerte.StartwerteEintragen(projektnummer);
336
337 SendStatusMail(projektnummer, new Integer(-1), -99, true);
338 }
339
340 /***
341 * Checkt die Entscheidungen des Unterenehmens und übernimmt sie im Zweifelsfall aus dem VorQuartal.
342 *
343 * @param projektnummer Die Projektnummer
344 */
345 private synchronized void CheckEntscheidungen(Integer projektnummer, Integer quartal)
346 {
347 if (log.isDebugEnabled())
348 {
349 log.debug(" CheckEntscheidungen");
350 }
351
352 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
353 DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
354
355 Collection projektgruppen = dipg.sucheProjektnummer(projektnummer);
356 Iterator projektgruppeniterator = projektgruppen.iterator();
357
358 while (projektgruppeniterator.hasNext())
359 {
360 Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
361
362 if (projektgruppe.getAktiv().booleanValue() == false || projektgruppe.getGruppenname().compareTo("Default") == 0 || projektgruppe.getGruppenname().compareTo("Projektleiter") == 0 || projektgruppe.getGruppenname().compareTo("Administratorgruppe") == 0)
363 projektgruppeniterator.remove();
364 }
365
366 projektgruppeniterator = projektgruppen.iterator();
367
368 Lock lock = new Lock(projektgruppen.size());
369
370 while (projektgruppeniterator.hasNext())
371 {
372 Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
373 Integer gruppennummer = projektgruppe.getGruppennummer();
374
375 CheckEntscheidungen mt = new CheckEntscheidungen(lock, projektnummer, gruppennummer, quartal);
376 mt.setName("P " + projektnummer + " - G " + gruppennummer + " - Q " + quartal);
377 mt.setPriority(3);
378 mt.start();
379 }
380
381 while (lock.getFinishSemaphore() > 0)
382 {
383 synchronized (lock)
384 {
385 try
386 {
387 Thread.sleep(25);
388
389 if (lock.getSemaphore() == projektgruppen.size())
390 {
391 lock.notifyAll();
392 }
393 }
394 catch (Exception e)
395 {
396 log.error(MailUtilities.SendErrorMailToAdmin("Fehler bei 'CheckEntscheidungen'", e.getMessage()));
397 log.error(e.getMessage(), e);
398 }
399 }
400 }
401 }
402
403 /***
404 * Berechnet die Werte für das Projekt und das angegebene Quartal
405 *
406 * @param projektnummer Die Projektnummer
407 * @param quartal Das Quartal
408 */
409 private synchronized void BerechneWerte(Integer projektnummer, Integer quartal)
410 {
411 if (log.isDebugEnabled())
412 {
413 log.debug(" BerechneHauptwerte");
414 }
415
416 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
417 DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
418
419 Collection projektgruppen = dipg.sucheProjektnummer(projektnummer);
420 Iterator projektgruppeniterator = projektgruppen.iterator();
421
422 while (projektgruppeniterator.hasNext())
423 {
424 Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
425
426 if (!projektgruppe.getAktiv().booleanValue() || projektgruppe.getGruppenname().compareTo("Default") == 0 || projektgruppe.getGruppenname().compareTo("Projektleiter") == 0 || projektgruppe.getGruppenname().compareTo("Administratorgruppe") == 0)
427 projektgruppeniterator.remove();
428 }
429
430 projektgruppeniterator = projektgruppen.iterator();
431
432 Lock lock = new Lock(projektgruppen.size());
433
434 while (projektgruppeniterator.hasNext())
435 {
436 Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
437 Integer gruppennummer = projektgruppe.getGruppennummer();
438
439 BerechneHauptwerte mt = new BerechneHauptwerte(lock, projektnummer, gruppennummer, quartal);
440 mt.setName("P " + projektnummer + " - G " + gruppennummer + " - Q " + quartal);
441 mt.setPriority(3);
442 mt.start();
443 }
444
445 while (lock.getFinishSemaphore() > 0)
446 {
447 synchronized (lock)
448 {
449 try
450 {
451 Thread.sleep(25);
452
453 if (lock.getSemaphore() == projektgruppen.size())
454 {
455 lock.notifyAll();
456 }
457 }
458 catch (Exception e)
459 {
460 log.error(MailUtilities.SendErrorMailToAdmin("Fehler bei 'BerechneWerte'", e.getMessage()));
461 log.error(e.getMessage(), e);
462 }
463 }
464 }
465
466 if (log.isDebugEnabled())
467 {
468 log.debug("BerechneVollUndGrenzkosten");
469 }
470
471 projektgruppeniterator = projektgruppen.iterator();
472 lock.setFinishSemaphore(projektgruppen.size());
473
474 while (projektgruppeniterator.hasNext())
475 {
476 Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
477 Integer gruppennummer = projektgruppe.getGruppennummer();
478
479 BerechneVollUndGrenzkosten mt = new BerechneVollUndGrenzkosten(lock, projektnummer, gruppennummer, quartal);
480 mt.setName("P " + projektnummer + " - G " + gruppennummer + " - Q " + quartal);
481 mt.setPriority(3);
482 mt.start();
483 }
484
485 while (lock.getFinishSemaphore() > 0)
486 {
487 synchronized (lock)
488 {
489 try
490 {
491
492 Thread.sleep(25);
493
494 if (lock.getSemaphore() == projektgruppen.size())
495 {
496 lock.notifyAll();
497 }
498 }
499 catch (Exception e)
500 {
501 log.error(MailUtilities.SendErrorMailToAdmin("Fehler bei 'BerechneWerte'", e.getMessage()));
502 log.error(e.getMessage(), e);
503 }
504 }
505 }
506
507 if (log.isDebugEnabled())
508 {
509 log.debug("BerechneBewertung");
510 }
511
512 projektgruppeniterator = projektgruppen.iterator();
513 lock.setFinishSemaphore(projektgruppen.size());
514
515 while (projektgruppeniterator.hasNext())
516 {
517 Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
518 Integer gruppennummer = projektgruppe.getGruppennummer();
519
520 BerechneBewertung mt = new BerechneBewertung(lock, projektnummer, gruppennummer, quartal);
521 mt.setName("P " + projektnummer + " - G " + gruppennummer + " - Q " + quartal);
522 mt.setPriority(3);
523 mt.start();
524 }
525
526 while (lock.getFinishSemaphore() > 0)
527 {
528 synchronized (lock)
529 {
530 try
531 {
532
533 Thread.sleep(25);
534
535 if (lock.getSemaphore() == projektgruppen.size())
536 {
537 lock.notifyAll();
538 }
539 }
540 catch (Exception e)
541 {
542 log.error(MailUtilities.SendErrorMailToAdmin("Fehler bei 'BerechneWerte'", e.getMessage()));
543 log.error(e.getMessage(), e);
544 }
545 }
546 }
547 }
548
549 /***
550 * Berechnet die Indices für das Projekt und das angegebene Quartal
551 *
552 * @param projektnummer Die Projektnummer
553 * @param quartal Das Quartal
554 */
555 private synchronized void ErstelleIndices(Integer projektnummer, Integer quartal)
556 {
557 if (log.isDebugEnabled())
558 {
559 log.debug("ErstelleIndices");
560 }
561
562 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
563 DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
564 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
565 DataInterfaceErgebnissdaten die = new DataInterfaceErgebnissdaten();
566
567 Collection projektgruppen = dipg.sucheProjektnummer(projektnummer);
568 Iterator projektgruppeniterator = projektgruppen.iterator();
569
570 Double inflation = new Double(0.0);
571 Double inflationVorhersage = new Double(0.0);
572 Double lohnerhoehung = new Double(0.0);
573 Double lohnerhoehungVorhersage = new Double(0.0);
574 Double saison = new Double(0.0);
575 Double saisonVorhersage = new Double(0.0);
576 Double konjunktur = new Double(0.0);
577 Double konjunkturVorhersage = new Double(0.0);
578
579 while (projektgruppeniterator.hasNext())
580 {
581 Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
582
583 if (projektgruppe.getAktiv().booleanValue() == false || projektgruppe.getGruppenname().compareTo("Default") == 0 || projektgruppe.getGruppenname().compareTo("Projektleiter") == 0 || projektgruppe.getGruppenname().compareTo("Administratorgruppe") == 0)
584 projektgruppeniterator.remove();
585 }
586
587 projektgruppeniterator = projektgruppen.iterator();
588
589 if (projektgruppeniterator.hasNext())
590 {
591 Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
592 Integer gruppennummer = projektgruppe.getGruppennummer();
593
594 inflation = ErstelleIndices.Inflation(projektnummer, gruppennummer, quartal);
595 inflationVorhersage = ErstelleIndices.InflationVorhersage(projektnummer, gruppennummer, quartal);
596 lohnerhoehung = ErstelleIndices.Lohnerhoehung(projektnummer, gruppennummer, quartal);
597 lohnerhoehungVorhersage = ErstelleIndices.LohnerhoehungVorhersage(projektnummer, gruppennummer, quartal);
598 saison = ErstelleIndices.Saison(projektnummer, gruppennummer, quartal);
599 saisonVorhersage = ErstelleIndices.SaisonVorhersage(projektnummer, gruppennummer, quartal);
600 konjunktur = ErstelleIndices.Konjunktur(projektnummer, gruppennummer, quartal);
601 konjunkturVorhersage = ErstelleIndices.KonjunkturVorhersage(projektnummer, gruppennummer, quartal);
602 }
603
604 projektgruppeniterator = projektgruppen.iterator();
605
606 while (projektgruppeniterator.hasNext())
607 {
608 Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
609 Integer gruppennummer = projektgruppe.getGruppennummer();
610
611 ArrayList aktuellesQuartal = (ArrayList) die.sucheQuartal(projektnummer, gruppennummer, quartal);
612 Ergebniss ergebnis = null;
613
614
615
616 ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENINFLATIONSRATE_KEY);
617 ergebnis.setObjectWert(inflation);
618 CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
619
620
621
622 ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENINFLATIONSRATEVORHERSAGE_KEY);
623 ergebnis.setObjectWert(inflationVorhersage);
624 CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
625
626
627
628 ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENLOHNERHOEHUNG_KEY);
629 ergebnis.setObjectWert(lohnerhoehung);
630 CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
631
632
633
634 ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENLOHNERHOEHUNGVORHERSAGE_KEY);
635 ergebnis.setObjectWert(lohnerhoehungVorhersage);
636 CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
637
638
639
640 ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENSAISONINDEX_KEY);
641 ergebnis.setObjectWert(saison);
642 CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
643
644
645
646 ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENSAISONINDEXVORHERSAGE_KEY);
647 ergebnis.setObjectWert(saisonVorhersage);
648 CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
649
650
651
652 ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENKONJUNKTURINDEX_KEY);
653 ergebnis.setObjectWert(konjunktur);
654 CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
655
656
657
658 ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENKONJUNKURINDEXVORHERSAGE_KEY);
659 ergebnis.setObjectWert(konjunkturVorhersage);
660 CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
661 }
662 }
663
664 /***
665 * Verschickt eMails mit Information über die erfolgte Berechnung.
666 *
667 * @param projektnummer Die Projektnummer
668 * @param quartal Das Quartal
669 * @param artDerBerechnung Die Art der Berechnung (-99, -1, 0, 1)
670 * @param success War der Vorgang erfolgreich (true/false)
671 */
672 private synchronized void SendStatusMail(Integer projektnummer, Integer quartal, int artDerBerechnung, boolean success)
673 {
674 if (log.isDebugEnabled())
675 {
676 log.debug("Email");
677 }
678
679 Properties properties = StringUtilities.getPropertiesFromFile("cabaweb.properties");
680
681 String smtphost = properties.getProperty("SMTPHost");
682 String smtpport = properties.getProperty("SMTPPort");
683 String smtpuser = properties.getProperty("SMTPUser");
684 String smtppassword = properties.getProperty("SMTPPassword");
685 String absenderadresse = properties.getProperty("AbsenderAdresse");
686 String absoluteURL = properties.getProperty("AbsoluteURL");
687
688 if (log.isDebugEnabled())
689 {
690 log.debug(" SMTP: " + smtphost + ":" + smtpport + " - SENDER: " + absenderadresse + " - URL: " + absoluteURL);
691 }
692
693 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
694 DataInterfaceGruppenmitglieder dig = new DataInterfaceGruppenmitglieder();
695
696 Collection gruppenmitglieder = dig.sucheProjektnummer(projektnummer);
697 Iterator gruppenmitgliederiterator = gruppenmitglieder.iterator();
698
699 while (gruppenmitgliederiterator.hasNext())
700 {
701 Gruppenmitglieder gruppenmitglied = (Gruppenmitglieder) gruppenmitgliederiterator.next();
702
703 if (gruppenmitglied.getAktiv().booleanValue() == false || gruppenmitglied.getProjektgruppe().getAktiv().booleanValue() == false || gruppenmitglied.getProjektgruppe().getProjekte().getAktiv().booleanValue() == false || gruppenmitglied.getProjektgruppe().getGruppenname().compareTo("Default") == 0)
704 gruppenmitgliederiterator.remove();
705 }
706
707 gruppenmitgliederiterator = gruppenmitglieder.iterator();
708
709 MessageResources grpmessages = MessageResources.getMessageResources("org.fhw.cabaweb.webfrontend.resources.CalculationResources");
710
711 String subject = null;
712 String mailbody = null;
713 String successString = null;
714
715 while (gruppenmitgliederiterator.hasNext())
716 {
717 Gruppenmitglieder gruppenmitglied = (Gruppenmitglieder) gruppenmitgliederiterator.next();
718
719 try
720 {
721 if (success)
722 successString = grpmessages.getMessage("description.successful");
723 else
724 successString = grpmessages.getMessage("description.failure");
725
726 switch (artDerBerechnung)
727 {
728 case -99 :
729 subject = grpmessages.getMessage("message.de.emailsubject.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString);
730 mailbody = grpmessages.getMessage("message.de.emailtext.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString) + "\n\n";
731 mailbody += "\n-----------------------------------------------------------------\n";
732 mailbody += grpmessages.getMessage("message.en.emailtext.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString) + "\n\n";
733 MailUtilities.sendMail(smtphost, smtpport, smtpuser, smtppassword, absenderadresse, gruppenmitglied.getMitgliedsemailadresse(), null, subject, mailbody);
734 break;
735 case -1 :
736 subject = grpmessages.getMessage("message.de.emailsubject.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString);
737 mailbody = grpmessages.getMessage("message.de.emailtext.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString) + "\n\n";
738 mailbody += "\n-----------------------------------------------------------------\n";
739 mailbody += grpmessages.getMessage("message.en.emailtext.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString) + "\n\n";
740 MailUtilities.sendMail(smtphost, smtpport, smtpuser, smtppassword, absenderadresse, gruppenmitglied.getMitgliedsemailadresse(), null, subject, mailbody);
741 break;
742 case 0 :
743 subject = "";
744 break;
745 case 1 :
746 subject = grpmessages.getMessage("message.de.emailsubject.calc", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString);
747 mailbody = grpmessages.getMessage("message.de.emailtext.calc", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString, absoluteURL) + "\n\n";
748 mailbody += "\n-----------------------------------------------------------------\n";
749 mailbody += grpmessages.getMessage("message.en.emailtext.calc", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString, absoluteURL) + "\n\n";
750 MailUtilities.sendMail(smtphost, smtpport, smtpuser, smtppassword, absenderadresse, gruppenmitglied.getMitgliedsemailadresse(), null, subject, mailbody);
751 break;
752 }
753 }
754 catch (IOException ex)
755 {
756 log.error(MailUtilities.SendErrorMailToAdmin("IOException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex.getLocalizedMessage()));
757 log.error(" IOException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
758 }
759 catch (AuthenticationFailedException ex)
760 {
761 log.error(MailUtilities.SendErrorMailToAdmin("AuthenticationFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex.getLocalizedMessage()));
762 log.error(" AuthenticationFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
763 }
764 catch (SendFailedException ex)
765 {
766 log.error(MailUtilities.SendErrorMailToAdmin("SendFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex.getLocalizedMessage()));
767 log.error(" SendFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
768 }
769 catch (AddressException ex)
770 {
771 log.error(MailUtilities.SendErrorMailToAdmin("AddressException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex.getLocalizedMessage()));
772 log.error(" AddressException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
773 }
774 catch (MessagingException ex)
775 {
776 log.error(MailUtilities.SendErrorMailToAdmin("MessagingException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex.getLocalizedMessage()));
777 log.error(" MessagingException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
778 }
779 }
780 }
781
782 /***
783 * Deaktiviert Unternehmen ohne Gruppenmitglieder bei der Berechnung von Quartal 0.
784 *
785 * @param projektnummer Die Projektnummer
786 */
787 private synchronized void DeaktiviereUnternehmen(Integer projektnummer)
788 {
789 if (log.isDebugEnabled())
790 {
791 log.debug(" DeaktiviereUnternehmen");
792 }
793
794 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
795 DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
796 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
797 DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
798
799 Collection projektgruppen = dipg.sucheProjektnummer(projektnummer);
800 Iterator projektgruppeniterator = projektgruppen.iterator();
801
802 while (projektgruppeniterator.hasNext())
803 {
804 Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
805
806 if (projektgruppe.getAktiv().booleanValue() == false || projektgruppe.getGruppenname().compareTo("Default") == 0 || projektgruppe.getGruppenname().compareTo("Projektleiter") == 0 || projektgruppe.getGruppenname().compareTo("Administratorgruppe") == 0)
807 {
808 projektgruppeniterator.remove();
809 }
810 }
811
812 projektgruppeniterator = projektgruppen.iterator();
813
814 while (projektgruppeniterator.hasNext())
815 {
816 Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
817 Collection gruppenmitglieder = digm.sucheGruppennummer(projektgruppe.getGruppennummer());
818
819 if(gruppenmitglieder.size() == 0)
820 {
821 projektgruppe.setAktiv(Boolean.FALSE);
822 dipg.editieren(projektgruppe);
823 projektgruppeniterator.remove();
824 }
825 }
826 }
827 }