Subversion Repositories public

Rev

Rev 4 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 andreas 1
<?php
2
/*
3
 * Modul:        ist.php
4
 * Zweck:        Verwaltet die IST-Erfassung, Eingabe in Stunden pro Tag
5
 * Aufruf:       Durch Menuepunkt "IST-Erfassung" in "forms.php->menu.inc"
6
 * Beschreibung: Dieses Modul verwaltet die IST-Erfassung in Stunden pro Tag.
7
 */
8
require_once('version.inc');
9
require_once('dbaccess.inc');
10
require_once('language.inc');
11
require_once('header.inc');
12
require_once('crypt.inc');
13
require_once('settings.inc');
14
require_once('helper.inc');
15
 
16
$drm = array(true, false, false, false, true, true, true, true);
17
$headline = 10;
18
 
19
require_once('menu.inc');
20
require_once('knumber.inc');
21
 
22
$func = $_REQUEST['func'];
23
 
24
# In diesem Modul global verwendete Variablen
25
$sumparr = array(0,0,0,0,0,0,0,0,0);	// Spaltensummen der Eingabezeilen
26
$sumiarr = array(0,0,0,0,0,0,0,0,0);
27
$sumallp = 0.0;		// Spaltensumme der Tasks
28
$sumalli = 0.0;
29
$TempExist = false;	// Temporaere Tabelle existiert?
30
 
31
# Folgende Funktion gibt die IST-Daten bzw. Eingabezeilen fuer einen
32
# Mitarbeiter innerhalb der Tabelle aus.
33
#
34
function ShowMitarbeiter($db, $minum, $anz, $von, $bis, $pr_num, $pl_num, $mi=true) {
35
	global $menu;
36
	global $headline;
37
	global $rstufe;
38
	global $leneinheit;
39
	global $periode;
40
	global $dtformatshort;
41
	global $ist_erledigung;
42
	global $ist_future;
43
	global $verrmodul;
44
	global $sumparr;
45
	global $sumiarr;
46
	global $sumallp;
47
	global $sumalli;
48
	global $TempExist;
49
 
50
	# Ermitteln ab wann noch erfasst werden darf.
51
	$query = "select ab_datum from abschluss where ab_prnum = $pr_num ";
52
	$query .= "and ab_plnum = $pl_num order by ab_datum desc";
53
 
54
	if (!($result = QueryDB($db, $query)))
55
	   return false;
56
 
57
	if (numrowsDB($result) > 0) {
58
	   $data = fetchDB($result, 0);
59
	   $ab_datum = $data[0];
60
	} else
61
	   $ab_datum = 0;
62
 
63
	# Projekt oder Konto?
64
	$query = "select pr_status from project where pr_num = $pr_num";
65
 
66
	if (!($result = QueryDB($db, $query)))
67
	   return false;
68
 
69
	$data = fetchDB($result, 0);
70
	$pr_status = $data[0];
71
 
72
	# Auslesen der Tasks welche bebucht werden koennen. Tasks die einem
73
	# aelteren Plan angehoeren auf dem bereits IST-Buchungen existieren,
74
	# werden ebenfalls ausgegeben, koennen aber nicht bebucht werden.
75
	# Nur Plaene mit Status "Aktiv" koennen bebucht werden!
76
	$akt = $von;
77
 
78
	if ($pr_status == 0) {
79
	   # Um das zu bekommen was wir wollen, muessen wir mit Hilfe einer
80
	   # temporaeren Tabelle arbeiten, welche wir nur in einer Schleife
81
	   # korrekt erstellen koennen.
82
	   if (!$TempExist) {
83
	      $query = "create local temporary table TempTask (";
84
	      $query .= "tmp_num integer not null unique, tmp_tanum integer, ";
85
	      $query .= "tmp_taname varchar(50), tmp_plan float8, tmp_ist float8,";
86
	      $query .= "tmp_datum integer, tmp_start integer,tmp_lfd smallint,";
87
	      $query .= "tmp_duration smallint, tmp_hash char(34), tmp_edit bool,";
88
	      $query .= "constraint \"temptask_pkey\" primary key (\"tmp_num\"))";
89
	      $TempExist = true;
90
	   } else {
91
	      $query = "delete from TempTask";
92
	   }
93
 
94
	   if (!($result = QueryDB($db, $query)))
95
	      return false;
96
 
97
	   $query = "select distinct on (ta_num) ta_name, ta_num, ta_start, ";
98
	   $query .= "ta_duration, ta_hash from task, allocation ";
99
	   $query .= "where al_task = ta_num and al_ressource = $minum and ";
100
	   $query .= "ta_meeting = 0 and ta_level > 1 and ";
101
	   $query .= "(ta_plnum = $pl_num or ta_plnum in ( ";
102
	   $query .= "select distinct pl_num from wdone, plan, task where ";
103
	   $query .= "ta_num = wd_task and pl_num = ta_plnum and ";
104
	   $query .= "wd_prnum = $pr_num and wd_minum = $minum and ";
105
	   $query .= "wd_datum between $von and $bis and ";
106
	   $query .= "pl_status in (2,3,4,5) order by pl_num desc)) and ";
107
 
108
	   if (!$ist_future) {
109
	      $query .= "(ta_start <= $bis or ";
110
	   } else {
111
	      $query .= "(ta_start between $von and $bis or ";
40 andreas 112
	      $query .= "ta_start+ta_duration::int8*86400 between $von and $bis or ";
113
	      $query .= "$von between ta_start and ta_start+ta_duration::int8*86400 or ";
114
	      $query .= "$bis between ta_start and ta_start+ta_duration::int8*86400 or ";
4 andreas 115
	   }
116
 
117
	   $query .= "ta_num in (select distinct wd_task from wdone where ";
118
	   $query .= "wd_minum = $minum and wd_prnum = $pr_num and ";
119
	   $query .= "wd_datum between $von and $bis)) ";
120
	   $query .= "order by ta_num desc";
121
 
122
	   if (!($result = QueryDB($db, $query)))
123
	      return false;
124
 
125
	   $menge = numrowsDB($result);
126
	   $i = 0;
127
	   $oldhash = "";
128
	   $counter = 1;
129
 
130
	   while ($i < $menge) {
131
	      $data = fetchDB($result, $i);
132
	      $ta_name = $data[0];
133
	      $ta_num = $data[1];
134
	      $ta_start = $data[2];
135
	      $ta_duration = $data[3];
136
	      $ta_hash = $data[4];
137
 
138
	      # Fuer jeden Tag der angezeigt werden soll, muss ein Datensatz
139
	      # eingefuegt werden.
140
	      $akt = $von;
141
	      $z = 0;
142
 
143
	      while ($z < $anz) {
144
	         # Nachsehen, ob schon ein Satz existiert. Wenn ja, dann muessen
145
	         # wir die IST-Werte aufaddieren. Beim Planwert gilt immer der
146
	         # Neueste.
147
	         $query = "select tmp_num from TempTask where ";
148
	         $query .= "tmp_hash = '$ta_hash' and tmp_datum = $akt";
149
 
150
	         if (!($resco = QueryDB($db, $query)))
151
	            return false;
152
 
153
		 if (numrowsDB($resco) > 0) {
154
		    $data = fetchDB($resco, 0);
155
		    $tmp_num = $data[0];
156
		 } else
157
		    $tmp_num = 0;
158
 
159
		 $query = "select sum(wd_hours) from wdone where ";
160
		 $query .= "wd_prnum = $pr_num and wd_minum = $minum and ";
161
		 $query .= "wd_task = $ta_num and wd_datum = $akt";
162
 
163
		 if (!($ressu = QueryDB($db, $query)))
164
		    return false;
165
 
166
		 if (numrowsDB($ressu) > 0) {
167
		    $data = fetchDB($ressu, 0);
168
		    $wd_hours = $data[0];
169
 
170
		    if (!isset($wd_hours))
171
		       $wd_hours = 0.0;
172
		 } else
173
		    $wd_hours = 0.0;
174
 
175
		 # Ermitteln, ob der Eintrag editierbar ist...
176
		 $query = "select wd_edit from wdone where ";
177
		 $query .= "wd_task = $ta_num and wd_minum = $minum and ";
178
		 $query .= "wd_datum = $akt ";
179
		 $query .= "order by wd_datum desc";
180
 
181
		 if (!($ressu = QueryDB($db, $query)))
182
		    return false;
183
 
184
		 if (numrowsDB($ressu) > 0) {
185
		    $data = fetchDB($ressu, 0);
186
		    $wd_edit = $data[0];
187
 
188
		    if ($wd_edit == 1 || $wd_edit == 't')
189
		       $wd_edit = "true";
190
		    else
191
		       $wd_edit = "false";
192
		 } else
193
		    $wd_edit = "true";
194
 
195
		 # Planstatus ermitteln
196
		 $query = "select pl_status from plan, task where ";
197
		 $query .= "pl_num = ta_plnum and ta_num = $ta_num";
198
 
199
		 if (!($ressu = QueryDB($db, $query)))
200
		   return false;
201
 
202
		 $data = fetchDB($ressu, 0);
203
		 $wstatus = $data[0];
204
 
205
		 if ($tmp_num == 0) {
206
		    if ($wstatus == 5) {
207
		       $wd_edit = "false";
208
		    }
209
 
210
		    $ta_name = addslashes($ta_name);
211
		    $query = "insert into TempTask (tmp_num, tmp_tanum, ";
212
		    $query .= "tmp_taname, tmp_start, tmp_duration, ";
213
		    $query .= "tmp_hash, tmp_datum, tmp_plan, tmp_ist, tmp_edit) ";
214
		    $query .= "values ($counter, $ta_num, '$ta_name', $ta_start, ";
215
		    $query .= "$ta_duration, '$ta_hash', $akt, 0.0, $wd_hours,";
216
		    $query .= "$wd_edit)";
217
		    $counter++;
218
		 } else {
219
		    $query = "update TempTask set tmp_ist = tmp_ist + $wd_hours ";
220
		    $query .= "where tmp_num = $tmp_num";
221
		 }
222
 
223
		if (!QueryDB($db, $query))
224
		   return false;
225
 
226
		 $akt += 86400;
227
		 $z++;
228
	      }
229
 
230
	      $oldhash = $ta_hash;
231
	      $i++;
232
	   }
233
 
234
	   $query = "select tmp_taname, tmp_plan, tmp_tanum, tmp_start, ";
235
	   $query .= "tmp_duration, tmp_hash, tmp_ist, tmp_datum, tmp_edit ";
236
	   $query .= "from TempTask order by tmp_num";
237
	} else {
238
	   $query = "select ta_name, ta_id, ta_num, ta_start, ta_duration, ta_hash from task ";
239
	   $query .= "where ta_plnum = $pl_num";
240
	}
241
 
242
	if (!($res = QueryDB($db, $query)))
243
	   return false;
244
 
245
	$rows = numrowsDB($res);
246
	$r = 0;
247
	$oldhash = "";
248
 
249
	while ($r < $rows) {
250
	   $data = fetchDB($res, $r);
251
	   $ta_name = $data[0];
252
	   $plan = $data[1];
253
	   $ta_num = $data[2];
254
	   $ta_start = $data[3];
255
	   $ta_duration = $data[4];
256
	   $ta_hash = $data[5];
257
 
258
	   if ($pr_status == 0) {
259
	      $ist = $data[6];
260
	      $tmp_datum = $data[7];
261
	      $tmp_edit = $data[8];
262
	   }
263
 
264
	   # Ermitteln des Planstatus zum aktuellen Task. Ist dieser
265
	   # "Inaktiv" dann darf nur dann eine Planausgabe erfolgen, wenn
266
	   # es einen IST-Wert in der entsprechenden Periode gibt.
267
	   $query = "select pl_status, pl_lfd from plan, task where ";
268
	   $query .= "pl_num = ta_plnum and ta_num = $ta_num";
269
 
270
	   if (!($resta = QueryDB($db, $query)))
271
	      return false;
272
 
273
	   $data = fetchDB($resta, 0);
274
	   $pl_status = $data[0];
275
	   $pl_lfd = $data[1];
276
 
277
	   # Taskname
278
	   echo "<tr><td class=\"sel\">$ta_name</td>";
279
 
280
	   # Plannummer und Planstatus
281
	   switch ($pl_status) {
282
	      case 0: $sstat = "Konto"; break;
283
	      case 1: $sstat = "In Erstellung"; break;
284
	      case 2: $sstat = "Freigegeben"; break;
285
	      case 4: $sstat = "Aktiv"; break;
286
	      case 5: $sstat = "Inaktiv"; break;
287
	      default: $sstat = "$pl_status";
288
	   }
289
 
290
	   if ($pr_status == 0)
291
	      echo "<td class=\"sel\">$pl_lfd:&nbsp;$sstat</td>\n";
292
	   else
293
	      echo "<td class=\"sel\">&nbsp;</td>\n";
294
 
295
	   # Mitarbeiter oder Projektleiter
296
	   if ($rstufe != 3 && $mi) {
297
	      $query = "select mi_nname, mi_vname from mitarbeiter where ";
298
	      $query .= "mi_num = $minum";
299
 
300
	      if (!($resmi = QueryDB($db, $query)))
301
	         return false;
302
 
303
	      $data = fetchDB($resmi, 0);
304
 
305
	      if (!$data) {
306
	         Error("Mitarbeiter konnte nicht ermittelt werden!");
307
	         return false;
308
	      }
309
 
310
	      $mi_nname = $data[0];
311
	      $mi_vname = $data[1];
312
	      echo "<td class=\"sel\">$mi_nname $mi_vname</td>\n";
313
	   } else {
314
	      echo "<td class=\"sel\">&nbsp;</td>\n";
315
	   }
316
 
317
	   $sumi = 0.0;
318
	   $sump = 0.0;
319
	   $z = 0;
320
	   $akt = $von;
321
 
322
	   while ($z < $anz) {
323
	      if ($pr_status == 1) {
324
	         $query = "select wd_hours, wd_edit, wd_task, wd_rk, wd_verr,";
325
		 $query .= "wd_text, wd_num from wdone, task where ";
326
	         $query .= "wd_minum = $minum and wd_prnum = $pr_num and ";
327
	         $query .= "ta_num = wd_task and ta_hash = '$ta_hash' and ";
328
	         $query .= "wd_datum = $akt";
329
 
330
	         if (!($reswd = QueryDB($db, $query)))
331
	            return false;
332
 
333
	         if (numrowsDB($reswd) > 0) {
334
	            $data = fetchDB($reswd, 0);
335
	            $wd_hours = $data[0];
336
	            $wd_edit = $data[1];
337
	            $wd_task = $data[2];
338
		    $wd_rk = $data[3];
339
		    $wd_verr = $data[4];
340
		    $wd_text = $data[5];
341
		    $wd_num = $data[6];
342
 
343
		    if (CheckTrue($wd_verr))
344
		       $wd_verr = true;
345
		    else
346
		       $wd_verr = false;
347
	         } else {
348
		    $wd_num = 0;
349
	            $wd_hours = 0;
350
	            $wd_edit = 1;
351
	            $wd_task = $ta_num;
352
		    $wd_rk = 0;
353
		    $wd_verr = false;
354
		    $wd_text = "";
355
	         }
356
	      } else {
357
	         $query = "select wd_num, wd_rk, wd_verr, wd_text from wdone where ";
358
	         $query .= "wd_minum = $minum and wd_prnum = $pr_num and ";
359
	         $query .= "wd_task = $ta_num and wd_datum = $akt";
360
 
361
	         if (!($reswd = QueryDB($db, $query)))
362
	            return false;
363
 
364
	         if (numrowsDB($reswd) > 0) {
365
	            $data = fetchDB($reswd, 0);
366
		    $wd_num = $data[0];
367
		    $wd_rk = $data[1];
368
		    $wd_verr = $data[2];
369
		    $wd_text = $data[3];
370
 
371
		    if (CheckTrue($wd_verr))
372
		       $wd_verr = true;
373
		    else
374
		       $wd_verr = false;
375
	         } else {
376
		    $wd_num = 0;
377
		    $wd_rk = 0;
378
		    $wd_verr = true;
379
		    $wd_text = "";
380
	         }
381
 
382
	         $wd_hours = $ist;
383
	         $wd_edit = $tmp_edit;
384
	         $wd_task = $ta_num;
385
	      }
386
 
387
	      if ($pr_status == 1)
388
	         $dcomp = true;
389
	      else {
390
	         if ($ist_future)
391
	            $dcomp = ($akt >= $ta_start && $akt <= ($ta_start+$ta_duration*86400)) ? true : false;
392
	         else
393
	            $dcomp = ($akt >= $ta_start) ? true : false;
394
	      }
395
 
396
	      # Heraus finden, ob der aktuelle Task dem neuesten Plan gehoert,
397
	      # oder nicht. Wenn es sich um einen aelteren Plan handelt
398
	      # (Status = Inaktiv) dann darf keine IST-Eingabe moeglich sein.
399
	      if ($dcomp || $pr_status == 1) {
400
	         $query = "select pl_status from plan, task where ";
401
	         $query .= "pl_num = ta_plnum and ta_num = $ta_num";
402
 
403
	         if (!($resdc = QueryDB($db, $query)))
404
	            return false;
405
 
406
		 $data = fetchDB($resdc, 0);
407
		 $akt_status = $data[0];
408
 
409
		 if ($pl_status < $akt_status) {
410
		    $dcomp = false;
411
		    $pplan = true;
412
		 }
413
	      } else
414
	         $pplan = false;
415
 
416
	      if (gmdate("w", $akt) == 6 || gmdate("w", $akt) == 0)
417
	         $class = "seldkgray";
418
	      else
419
	         $class = "sel";
420
 
421
	      if ($akt > $ab_datum && $dcomp && CheckTrue($wd_edit)) {
422
	         $name = "dt_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $akt;
423
		 echo "<td class=\"$class\"><table border=0 cellspacing=0 cellpadding=0><tr><td>";
424
	         printf("<input type=\"text\" name=\"$name\" value=\"%s\" size=6 maxlength=6 onChange=\"javascript:document.getElementById('message').style.visibility = 'visible';\"></td>",
425
			($wd_hours <= 0) ? "" : FormatNum($wd_hours, 3));
426
 
427
		 if ($verrmodul) {
428
		    $dr_num = 0;
429
		    $dr_date_start = "";
430
		    $dr_time_start = "";
431
		    $dr_date_end = "";
432
		    $dr_time_end = "";
433
		    $dr_target = "";
434
		    $dr_purpose = "";
435
		    $dr_pnightr = false;
436
		    $dr_nightr = 0;
437
		    $dr_amount = 0;
438
		    $dr_kmcar = 0;
439
		    $dr_kfzkenn = "";
440
		    $dr_kmdrain = 0;
441
		    $dr_pkmplain = false;
442
		    $dr_kmplain = 0;
443
		    $dr_costloc = 0;
444
		    $dr_whg = $stdwhg;
445
 
446
		    if ($wd_num > 0) {
447
		       $dtdb = GetDBDateFormat();
448
		       $query = "select dr_num, to_char(dr_date_start, '$dtdb'),";
449
		       $query .= "to_char(dr_date_start, 'HH24:MI'), ";
450
		       $query .= "to_char(dr_date_end, '$dtdb'), to_char(dr_date_end, 'HH24:MI'),";
451
		       $query .= "dr_target, dr_purpose, dr_pnightr, dr_nightr, dr_amount,";
452
		       $query .= "dr_kmcar, dr_kfzkenn, dr_kmdrain, dr_pkmplain,";
453
		       $query .= "dr_kmplain, dr_costloc, dr_whg, dr_remark from dration ";
454
		       $query .= "where dr_wdnum = $wd_num";
455
 
456
		       if (!($resdr = QueryDB($db, $query)))
457
		          return false;
458
 
459
		       if (numrowsDB($resdr) > 0) {
460
		          $data = fetchDB($resdr, 0);
461
			  $dr_num = $data[0];
462
			  $dr_date_start = $data[1];
463
			  $dr_time_start = $data[2];
464
			  $dr_date_end = $data[3];
465
			  $dr_time_end = $data[4];
466
			  $dr_target = $data[5];
467
			  $dr_purpose = $data[6];
468
			  $dr_pnightr = $data[7];
469
			  $dr_nightr = $data[8];
470
			  $dr_amount = $data[9];
471
			  $dr_kmcar = $data[10];
472
			  $dr_kfzkenn = $data[11];
473
			  $dr_kmdrain = $data[12];
474
			  $dr_pkmplain = $data[13];
475
			  $dr_kmplain = $data[14];
476
			  $dr_costloc = $data[15];
477
			  $dr_whg = $data[16];
478
			  $dr_remark = $data[17];
479
		       }
480
		    }
481
 
482
		    echo "<td>";
483
		    ButtonImagePrint("pencil.png", "Ergaenzungen", "verrmist.php",
484
		 	"menu=$menu&headline=$headline&minum=$minum&pr_num=$pr_num&".
485
		 	"ta_num=$wd_task&datum=$akt&header=2&func=AddIst&".
486
			"dr_whg=$dr_whg", 725, 720, true);
487
		 }
488
 
489
		 echo "</td></tr></table>";
490
 
491
		 if ($verrmodul) {
492
		    if (!isset($dr_date_start) || strlen($dr_date_start) < 6) {
493
		       $dr_date_start = date($dtformatshort, $akt);
494
		       $dr_time_start = "08:00";
495
		    }
496
 
497
		    if (!isset($dr_date_end) || strlen($dr_date_end) < 6) {
498
		       $dr_date_end = $dr_date_start;
499
		       $dr_time_end = "18:00";
500
		    }
501
 
502
		    $hidden = "vr_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
503
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$wd_verr\">\n";
504
		    $hidden = "rk_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
505
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$wd_rk\">\n";
506
		    $hidden = "am_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
507
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_amount\">\n";
508
		    $hidden = "nu_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
509
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_num\">\n";
510
		    $hidden = "wh_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
511
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_whg\">\n";
512
		    $hidden = "tx_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
513
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$wd_text\">\n";
514
		    $hidden = "ds_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
515
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_date_start\">\n";
516
		    $hidden = "de_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
517
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_date_end\">\n";
518
		    $hidden = "ts_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
519
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_time_start\">\n";
520
		    $hidden = "te_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
521
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_time_end\">\n";
522
		    $hidden = "ta_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
523
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_target\">\n";
524
		    $hidden = "pu_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
525
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_purpose\">\n";
526
		    $hidden = "pn_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
527
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_pnightr\">\n";
528
		    $hidden = "ni_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
529
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_nightr\">\n";
530
		    $hidden = "mc_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
531
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_kmcar\">\n";
532
		    $hidden = "kf_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
533
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_kfzkenn\">\n";
534
		    $hidden = "md_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
535
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_kmdrain\">\n";
536
		    $hidden = "pp_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
537
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_pkmplain\">\n";
538
		    $hidden = "mp_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
539
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_kmplain\">\n";
540
		    $hidden = "cl_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
541
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_costloc\">\n";
542
		    $hidden = "rm_" . $minum . "_" . $pr_num . "_" . $ta_num . "_" . $akt;
543
		    echo "<input type=\"hidden\" name=\"$hidden\" value=\"$dr_remark\">\n";
544
		 }
545
 
546
		 echo "</td>\n";
547
	      }
548
	      else if ($pplan)
549
	         printf("<td class=\"$class\" align=\"right\">%s</td>\n", FormatNum($wd_hours, 3));
550
	      else
551
	         printf("<td class=\"$class\" align=\"right\">%s</td>\n", ($wd_hours <= 0) ? "" : FormatNum($wd_hours, 3));
552
 
553
	      $akt += 86400;
554
	      $sumi += $wd_hours;
555
	      $sumiarr[$z] += $wd_hours;
556
	      $z++;
557
 
558
	      if ($pr_status == 0 && $z < $anz) {
559
		 $r++;
560
 
561
		 if ($r >= $rows) {
562
		    $r--;
563
		 } else {
564
		    $data = fetchDB($res, $r);
565
		    $ta_name = $data[0];
566
		    $plan = $data[1];
567
		    $ta_num = $data[2];
568
		    $ta_start = $data[3];
569
		    $ta_duration = $data[4];
570
		    $ta_hash = $data[5];
571
		    $ist = $data[6];
572
		    $tmp_datum = $data[7];
573
		 }
574
	      }
575
	   }
576
 
577
	   printf("<td class=\"selakt\" align=\"right\"><b>%s</b></td>\n", FormatNum($sumi, 3));
578
 
579
	   # Um die Summen des gesamten Task anzeigen zu koennen, muessen wir
580
	   # erst alles summieren. Das gilt jedoch nur fuer Projekte und nicht
581
	   # fuer Konten!
582
	   if ($pr_status == 0) {
583
	      $query = "select sum(al_hours) from allocation where ";
584
	      $query .= "al_task = $ta_num and al_ressource = $minum";
585
 
586
	      if (!($ressu = QueryDB($db, $query)))
587
	         return false;
588
 
589
	      $data = fetchDB($ressu, 0);
590
	      $plan = $data[0];
591
 
592
	      $query = "select sum(wd_hours) / $leneinheit from wdone, task where ";
593
	      $query .= "ta_num = wd_task and ta_hash = '$ta_hash' and ";
594
	      $query .= "wd_minum = $minum and wd_prnum = $pr_num";
595
 
596
	      if (!($ressu = QueryDB($db, $query)))
597
	         return false;
598
 
599
	      $data = fetchDB($ressu, 0);
600
	      $ist = $data[0];
601
	   } else {
602
	      $plan = 0.0;
603
	      $ist = 0.0;
604
	   }
605
 
606
	   printf("<td class=\"selnum\"><b>%s</b></td>\n", FormatNum($plan, 3));
607
 
608
	   if (!$ist_erledigung && $ist > $plan && $pr_status == 0) {
609
	      printf("<td class=\"five\" align=\"right\" valign=\"top\"><b>%s</b></td>\n", FormatNum($ist, 3));
610
	   } else {
611
	      printf("<td class=\"selnum\"><b>%s</b></td>\n", FormatNum($ist, 3));
612
	   }
613
 
614
	   $sumallp += $plan;
615
	   $sumalli += $ist;
616
 
617
	   if ($ist_erledigung) {
618
	      if ($plan != 0)
619
	         $proz = $ist / $plan * 100.0;
620
	      else
621
	         $proz = 0.0;
622
 
623
	      if ($proz > 100.0 && $pr_status == 0)
624
	         printf ("<td class=\"five\" align=\"right\">%s%%</td></tr>\n", FormatNum($proz, 1));
625
	      else
626
	         printf ("<td class=\"selnum\">%s%%</td></tr>\n", FormatNum($proz, 1));
627
	   }
628
 
629
	   $r++;
630
	}
631
 
632
	return true;
633
}
634
 
635
# Folgende Funktion verwaltet und visualisiert die Auswahlmoeglichkeiten
636
# fuer die IST-Erfassung. Fuer die Darstellung und Eingabefelder der
637
# eigentlichen Isterfassung fuer einen Mitarbeiter, siehe ShowMitarbeiter()
638
#
639
function ManageTime() {
640
	global $phase;
641
	global $rstufe;
642
	global $unum;
643
	global $einheit;
644
	global $leneinheit;
645
	global $periode;
646
	global $ist_erledigung;
647
	global $ist_future;
648
	global $menu;
649
	global $headline;
650
	global $sumparr;
651
	global $sumiarr;
652
	global $sumallp;
653
	global $sumalli;
654
	global $dtformatshort;
655
 
656
	$db = OpenDB();
657
	$nav = "menu=$menu&headline=$headline&project='+";
658
 
659
	if ($rstufe != 3) {
660
	   $nav .= "document.ist.project.value+'&mitarbeiter='+";
661
	   $nav .= "document.ist.mitarbeiter.value+'&von='+";
662
	} else
663
	   $nav .= "document.ist.project.value+'&von='+";
664
 
665
	$nav .= "document.ist.von.value+'&bis='+document.ist.bis.value+'";
666
 
667
	# Per default waehlen wir alle Projekte (eines Mitarbeiters) aus,
668
	# alle Mitarbeiter die diesem Projekt zugeordnet sind, sofern es sich
669
	# um den Projektleiter handelt und die im Zeitraum der aktuellen
670
	# Periode sind, aus.
671
	#
672
	if ($rstufe == 2 || $rstufe == 3) {
673
	   $query = "select distinct on (pr_num) pr_num, pr_name, pr_pl, mi_nname, mi_vname, pl_num, pl_lfd, pl_status ";
674
	   $query .= "from project ";
675
	   $query .= "inner join plan on pl_prnum = pr_num and pl_status in (0,2,3,4) ";
676
	   $query .= "left join task on ta_plnum = pl_num ";
677
	   $query .= "left join allocation on ta_num = al_task ";
678
	   $query .= "left join mitarbeiter on mi_num = pr_pl ";
679
 
680
	   if ($rstufe == 2)
681
	      $query .= "where pr_pl = $unum or pr_status = 1 or al_ressource = $unum ";
682
	   else
683
	      $query .= "where pr_status = 1 or al_ressource = $unum";
684
 
685
//	   $query = "select distinct on (pr_num) pr_num, pr_name, pr_pl, ";
686
//	   $query .= "mi_nname, mi_vname, pl_num, pl_lfd, pl_status ";
687
//	   $query .= "from project, plan, mitarbeiter, task, allocation ";
688
//	   $query .= "where pl_prnum = pr_num and mi_num = pr_pl ";
689
//	   $query .= "and pl_status in (0, 2, 3, 4, 5) and pl_num = ta_plnum and ";
690
//	   $query .= "ta_num = al_task and ";
691
 
692
//	   if ($rstufe == 2)
693
//	      $query .= "(al_ressource = $unum or pr_pl = $unum or pr_status = 1) ";
694
//	   else
695
//	      $query .= "(al_ressource = $unum or pr_status = 1)";
696
	} else {
697
	   $query = "select distinct on (pr_num) pr_num, pr_name, pr_pl, mi_nname, mi_vname, pl_num, pl_lfd, pl_status ";
698
	   $query .= "from project ";
699
	   $query .= "inner join plan on pl_prnum = pr_num and pl_status in (0,2,3,4) ";
700
	   $query .= "left join task on ta_plnum = pl_num ";
701
	   $query .= "left join allocation on ta_num = al_task ";
702
	   $query .= "left join mitarbeiter on mi_num = pr_pl ";
703
 
704
//	   $query = "select distinct on (pr_num) pr_num, pr_name, pr_pl, mi_nname, mi_vname, ";
705
//	   $query .= "pl_num, pl_lfd, pl_status ";
706
//	   $query .= "from project, plan, mitarbeiter where ";
707
//	   $query .= "pl_prnum = pr_num and mi_num = pr_pl and ";
708
//	   $query .= "pl_status in (0, 2, 3, 4, 5) ";
709
	}
710
 
711
	$query .= "order by pr_num, pl_lfd desc";
712
 
713
	if (!($result = QueryDB($db, $query))) {
714
	   closeDB($db);
715
	   return;
716
	}
717
 
718
	$rows = numrowsDB($result);
719
 
720
	if ($rows <= 0) {
721
	   Error(GetMessage($db, 238, "Es wurden keine bebuchbaren Projekte gefunden!"));
722
	   closeDB($db);
723
	   return;
724
	}
725
 
726
	# Auswahlfelder fuer die IST-Buchungen anzeigen
727
	$project = $_REQUEST['project'];
728
	$mitarbeiter = $_REQUEST['mitarbeiter'];
729
	$von = $_REQUEST['von'];
730
	$bis = $_REQUEST['bis'];
731
	$func = $_REQUEST['func'];
732
 
733
	if (!isset($mitarbeiter))
734
	   $mitarbeiter = $unum;
735
 
736
	if (isset($von) && isset($bis)) {
737
	   $dxa = explode(GetDateSep(), $von);
738
	   $dxb = explode(GetDateSep(), $bis);
739
	   $dta = gmmktime(0, 0, 0, $dxa[1], $dxa[0], $dxa[2]);
740
	   $dtb = gmmktime(0, 0, 0, $dxb[1], $dxb[0], $dxb[2]);
741
 
742
	   if ($dta > $dtb) {
743
	      Error(GetMessage($db, 239, "Das \"Datum von\" darf nicht gr&ouml;&szlig;er als das \"Datum bis\" sein!"));
744
	      unset($von);
745
	      unset($bis);
746
	   } else {
747
	      if (isset($func) && $func == "PrevWeek") {
748
	         $dta -= 86400 * 7;
749
	         $dtb -= 86400 * 7;
750
	      } else if (isset($func) && $func == "NextWeek") {
751
	         $dta += 86400 * 7;
752
		 $dtb += 86400 * 7;
753
	      }
754
 
755
	      if (isset($func) && $func == "Today") {
756
	         unset($von);
757
		 unset($bis);
758
	      } else {
759
	         $von = gmdate($dtformatshort, $dta);
760
	         $bis = gmdate($dtformatshort, $dtb);
761
	      }
762
	   }
763
 
764
	   unset($dxa);
765
	   unset($dxb);
766
	   unset($dta);
767
	   unset($dtb);
768
	}
769
 
770
 
771
	echo "<form name=\"ist\" action=\"ist.php\" method=\"post\" onChange=\"javascript:AktDocument=this\">\n";
772
	echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n";
773
	echo "<input type=\"hidden\" name=\"headline\" value=\"$headline\">\n";
774
	echo "<input type=\"hidden\" name=\"func\" value=\"save\">\n";
775
	# Hier werden zwei Tabellen ineinander verschachtelt. Die aeussere
776
	# Tabelle beinhaltet in der linken Spalte die Tabelle zum Setzen
777
	# der Grundeinstellungen.
778
	# Die rechte Spalte beinhaltet optional Hinweise fuer den Benutzer,
779
	# wie z.B. dass Daten veraendert wurden, aber noch nicht gespeichert
780
	# sind.
781
	echo "<table width=\"98%\"border=0 cellpadding=0 cellspacing=0><tr><td>";
782
	# Auswahlmoeglichkeiten in der linken Spalte:
783
	echo "<table class=\"input\">\n<tr>\n";
784
	# Projekte anzeigen
785
	echo "<td>" . GetMessage($db, 200, "Projekte") . "</td>\n";
786
	echo "<td><select name=\"project\" ";
787
	echo "onChange=\"javascript:MoveTo('ist.php','$nav')\">\n";
788
	echo "<option value=\"0\">" . GetMessage($db, 241, "Alle") . "</option>\n";
789
	$r = 0;
790
	$flag = false;
791
 
792
	while ($r < $rows) {
793
	   $data = fetchDB($result, $r);
794
	   $pr_num = $data[0];
795
	   $pr_name = $data[1];
796
	   $plnum = $data[5];
797
	   $pl_lfd = $data[6];
798
	   $pl_status = $data[7];
799
 
800
	   if ($pl_status == 6) {
801
	      $r++;
802
	      continue;
803
	   }
804
 
805
	   $part = ($pl_status == 0) ? GetMessage($db, 242, "K:") : GetMessage($db, 243, "P:");
806
 
807
	   if ($pr_num == $project) {
808
	      echo "<option value=\"$pr_num\" selected>$part $pr_num $pr_name</option>\n";
809
	      $pl_selnum = $plnum;
810
	      $flag = true;
811
	   } else
812
	      echo "<option value=\"$pr_num\">$part $pr_num $pr_name</option>\n";
813
 
814
	   $r++;
815
	}
816
 
817
	echo "</select></td>\n";
818
 
819
	if (!$flag)
820
	   $project = 0;
821
 
822
	# optional Mitarbeiter anzeigen
823
	if ($rstufe == 1 || $rstufe == 2) {
824
	   echo "<td>" . GetMessage($db, 66, "Mitarbeiter") . "</td><td><select name=\"mitarbeiter\" ";
825
	   echo "onChange=\"javascript:MoveTo('ist.php','$nav')\">\n";
826
	   echo "<option value=\"0\">" . GetMessage($db, 241, "Alle") . "</option>\n";
827
 
828
	   $r = 0;
829
 
830
	   while ($r < $rows) {
831
	      $data = fetchDB($result, $r);
832
	      $pl_num[$r] = $data[5];
833
	      $pl_status[$r] = $data[7];
834
	      $r++;
835
	   }
836
 
837
	   if (isset($pl_selnum) && $pl_selnum > 0) {
838
	      $query = "select pl_status from plan where pl_num = $pl_selnum";
839
 
840
	      if (!($res = QueryDB($db, $query))) {
841
	         closeDB($db);
842
	         return;
843
	      }
844
 
845
	      $data = fetchDB($res, 0);
846
	      $pstat = $data[0];
847
	   } else
848
	      $pstat = -1;
849
 
850
	   if ($pstat != 0) {
851
	      $query = "select distinct al_ressource, mi_nname,";
852
	      $query .= "mi_vname from ";
853
	      $query .= "allocation, task, mitarbeiter where ";
854
	      $query .= "ta_num = al_task and mi_num = al_ressource and ";
855
	      $query .= "ta_plnum in (";
856
 
857
	      if (isset($pl_selnum) && $pl_selnum > 0) {
858
	         $query .= "$pl_selnum";
859
	      } else {
860
	         $r = 0;
861
	         $flag = false;
862
 
863
	         while ($r < $rows) {
864
	            if ($pl_status[$r] == 6) {
865
	               $r++;
866
	               continue;
867
	            }
868
 
869
	            if ($flag)
870
	               $query .= "," . $pl_num[$r];
871
	            else
872
	               $query .= $pl_num[$r];
873
 
874
		    $flag = true;
875
	            $r++;
876
	         }
877
	      }
878
 
879
	      $query .= ") order by mi_nname, mi_vname";
880
	   } else {
881
	      $query = "select mi_num, mi_nname, mi_vname from mitarbeiter ";
882
	      $query .= "where mi_plan = true order by mi_nname, mi_vname";
883
	   }
884
 
885
	   if (!($resmi = QueryDB($db, $query))) {
886
	      closeDB($db);
887
	      return;
888
	   }
889
 
890
	   $nr = numrowsDB($resmi);
891
	   $r = 0;
892
	   $flag = false;
893
 
894
	   while ($r < $nr) {
895
	      $data = fetchDB($resmi, $r);
896
	      $al_ressource = $data[0];
897
	      $mi_nname = $data[1];
898
	      $mi_vname = $data[2];
899
 
900
	      if ($al_ressource == $mitarbeiter) {
901
	         echo "<option value=\"$al_ressource\" selected>$mi_nname $mi_vname</option>\n";
902
	         $flag = true;
903
	      } else
904
	         echo "<option value=\"$al_ressource\">$mi_nname $mi_vname</option>\n";
905
 
906
	      $r++;
907
	   }
908
 
909
	   echo "</select></td></tr>\n";
910
 
911
	   if (!$flag)
912
	      $mitarbeiter = 0;
913
	} else
914
	   echo "<td colspan=2>&nbsp;</td>\n";
915
 
916
	# Zeitraum von anzeigen
917
	$vd = GetVisualDate($dtformatshort, false);
918
	echo "<tr><td>" . GetMessage($db, 373, "Zeitraum von (%s):", $vd) . "</td>\n";
919
 
920
	if (isset($von) && strlen($von) >= 4) {
921
	   $sd = explode(GetDateSep(), $von);
922
	   $dat = gmmktime(0, 0, 0, $sd[1], $sd[0], $sd[2]);
923
	   unset($sd);
924
	} else {
925
	   $dat = time() - 86400 * 6;
926
	}
927
 
928
	$mon = gmdate("n", $dat);
929
	$year = gmdate("Y", $dat);
930
	$day = gmdate("j", $dat);
931
 
932
	$dvon = gmmktime(0, 0, 0, $mon, $day, $year);
933
	echo "<td colspan=3><table border=0 cellpadding=0><tr><td><input type=\"text\" name=\"von\" value=\"";
934
	$vd = gmdate($dtformatshort, $dvon);
935
	echo "$vd\" size=10 maxlength=10 onBlur=\"javascript:CheckDate(this,0)\">";
936
 
937
	# Zeitraum bis anzeigen
938
	if (isset($bis) && strlen($bis) >= 4) {
939
	   $sd = explode(GetDateSep(), $bis);
940
	   $dat = gmmktime(0, 0, 0, $sd[1], $sd[0], $sd[2]);
941
	   unset($sd);
942
	} else {
943
	   $dat = time();
944
	}
945
 
946
	$mon = gmdate("n", $dat);
947
	$year = gmdate("Y", $dat);
948
	$day = gmdate("j", $dat);
949
	$dbis = gmmktime(0, 0, 0, $mon, $day, $year);
950
	echo " " . GetMessage($db, 246, "Bis:") . " <input type=\"text\" name=\"bis\" value=\"";
951
	$vd = gmdate($dtformatshort, $dbis);
952
	echo "$vd\" size=10 maxlength=10 onBlur=\"javascript:CheckDate(this,0)\"></td>\n";
953
	echo "<td>";
40 andreas 954
	ButtonImageMove("left.png", GetMessage($db, 374, "Woche zur�ck"), "ist.php", "func=PrevWeek&$nav");
4 andreas 955
	echo "</td><td>";
956
	ButtonImageMove("right.png", GetMessage($db, 375, "Woche vor"), "ist.php", "func=NextWeek&$nav");
957
	echo "</td><td>";
958
	ButtonImageMove("today.png", GetMessage($db, 249, "Heute"), "ist.php", "func=Today&$nav");
959
	echo "</td><td>";
960
	ButtonLink(GetMessage($db, 250, "Zeitraum setzen"), "ist.php","$nav");
961
	echo "</td></tr></table></td>";
962
 
963
	if ($rstufe == 1 || $rstufe == 2)
964
	   echo "<td colspan=2>&nbsp;</td>";
965
 
966
	echo "</tr></table>\n";
967
	# Ende der linken Spalte.
968
	echo "</td>\n";
969
	# Textmitteilungen in der rechten Spalte:
970
	echo "<td align=\"center\" valign=\"middle\"><div id=\"message\">\n";
971
	echo "<table border=0 cellspacing=0 cellpadding=0><tr><td>";
972
	echo "<img src=\"image/exclamation.jpeg\" alt=\"Exclamation mark\" width=30 height=30></td><td>";
973
	Output ($db, 376, "Bitte speichern Sie die ver&auml;nderten Daten!");
974
	echo "</td></tr></table>";
975
	# Ende der rechten Spalte und der Kopftabelle:
976
	echo "</div></td></tr></table>\n";
977
 
978
	# Aufbau der Tabelle zur IST-Erfassung
979
	#
980
	# Tabellenkopf
981
	echo "<table class=\"sel\"><tr>\n";
982
	echo "<th class=\"sel\" colspan=3>";
983
	# Button zum Senden / Rueckgaengig machen
984
	echo "<table border=0 cellpadding=0 cellspacing=0><tr><td>";
985
	Button("Speichern", "ist");
986
	echo "</td><td>";
987
	ButtonProg(GetMessage($db, 251, "Zur&uuml;cksetzen"), "if (!DocChanged) document.getElementById('message').style.visibility = 'hidden'; document.ist.reset()");
988
	echo "</td></tr></table>\n";
989
	echo "</th>\n";
990
 
991
	# Ermitteln des gewuenschten Zeitraums
992
	$anz = GetAnzEntries($dvon, $dbis);
993
 
994
	if ($anz > 1)
995
	   echo "<th class=\"sel\" colspan=$anz>";
996
	else
997
	   echo "<th class=\"sel\">";
998
 
999
	Output ($db, 377, "Stunden pro PT");
1000
	echo "</th>\n";
1001
	echo "<th class=\"sel\">" . GetMessage($db, 253, "Summe&nbsp;Zeile") . "</th>\n";
1002
 
1003
	if ($ist_erledigung)
1004
	   echo "<th class=\"sel\" colspan=3>" . GetMessage($db, 254, "Summe&nbsp;(PT)/Task") . "</th></tr>\n";
1005
	else
1006
	   echo "<th class=\"sel\" colspan=2>" . GetMessage($db, 254, "Summe&nbsp;(PT)/Task") . "</th></tr>\n";
1007
 
1008
	echo "<tr><th class=\"sel\">" . GetMessage($db, 255, "Projekt&nbsp;/&nbsp;Task") . "</th>\n";
1009
	echo "<th class=\"sel\">" . GetMessage($db, 256, "PlNr./Status") . "</th>\n";
1010
 
1011
	if ($rstufe != 3 && isset($mitarbeiter) && $mitarbeiter == 0)
1012
	   echo "<th class=\"sel\">" . GetMessage($db, 257, "PL&nbsp;/&nbsp;Mitarbeiter") . "</th>\n";
1013
	else
1014
	   echo "<th class=\"sel\">" . GetMessage($db, 258, "Projektleiter") . "</th>\n";
1015
 
1016
	$r = 0;
1017
	$dt = $dvon;
1018
 
1019
	while ($r < $anz) {
1020
	   $datum = GetShortDateYear($dt);
1021
	   $dt += 86400;
1022
	   echo "<th class=\"sel\">$datum</th>\n";
1023
	   $r++;
1024
	}
1025
 
1026
	echo "<th class=\"sel\">" . GetMessage($db, 279, "IST") . "</th>\n";
1027
	echo "<th class=\"sel\">" . GetMessage($db, 259, "Plan") . "</th>\n";
1028
	echo "<th class=\"sel\">" . GetMessage($db, 279, "IST") . "</th>\n";
1029
 
1030
	if ($ist_erledigung)
1031
	   echo "<th class=\"sel\">" . GetMessage($db, 261, "Erl.") . "</th>\n";
1032
 
1033
	echo "</tr>\n";
1034
	# Tabelle mit Inhalten fuellen...
1035
	$r = 0;
1036
 
1037
	while ($r < $rows) {
1038
	   $data = fetchDB($result, $r);
1039
	   $pr_num = $data[0];
1040
	   $pr_name = $data[1];
1041
	   $pr_pl = $data[2];
1042
	   $mi_nname = $data[3];
1043
	   $mi_vname = $data[4];
1044
	   $pl_num = $data[5];
1045
	   $pl_lfd = $data[6];
1046
	   $pl_status = $data[7];
1047
 
1048
	   # Projekte die einen Plan mit Status = 6 (Abgeschlossen) haben,
1049
	   # ignorieren! Sollten nicht vorkommen!
1050
	   $query = "select count(*) from plan where pl_prnum = $pr_num and pl_status = 6";
1051
 
1052
	   if (!($resco = QueryDB($db, $query))) {
1053
	      closeDB($db);
1054
	      return;
1055
	   }
1056
 
1057
	   $data = fetchDB($resco, 0);
1058
	   $menge = $data[0];
1059
 
1060
	   if ($pl_status == 6 || $menge > 0) {
1061
	      $r++;
1062
	      continue;
1063
	   }
1064
 
1065
	   # Wenn ein bestimmtes Projekt gewaehlt wurde, nur dieses anzeigen.
1066
	   if (isset($project) && $project > 0 && $pr_num != $project) {
1067
	      $r++;
1068
	      continue;
1069
	   }
1070
 
1071
	   # Pruefen, ob es fuer das aktuelle Projekt auch Tasks zum Anzeigen
1072
	   # gibt. Falls nicht, untersuchen wir das naechste Projekt.
1073
	   if ($pl_status > 0) {
1074
	      $query = "select count(*) from task, plan, allocation where ";
1075
	      $query .= "pl_num = ta_plnum and al_task = ta_num and ";
1076
 
1077
	      if (!$ist_future) {
1078
	         $query .= "ta_start <= $dbis and ";
1079
	      } else {
1080
	         $query .= "(ta_start between $dvon and $dbis or ";
40 andreas 1081
	         $query .= "ta_start+ta_duration::int8*86400 between $dvon and $dbis or ";
1082
	         $query .= "$dvon between ta_start and ta_start+ta_duration::int8*86400 or ";
1083
	         $query .= "$dbis between ta_start and ta_start+ta_duration::int8*86400) and ";
4 andreas 1084
	      }
1085
 
1086
//	      $query .= "ta_plnum = $pl_num and ";
1087
	      $query .= "pl_prnum = $pr_num ";
1088
 
1089
	      if ($rstufe == 3)
1090
	         $query .= " and al_ressource = $unum";
1091
	      else if (isset($mitarbeiter) && $mitarbeiter > 0)
1092
	         $query .= " and al_ressource = $mitarbeiter";
1093
 
1094
	      if (!($resta = QueryDB($db, $query))) {
1095
	         closeDB($db);
1096
	         return;
1097
	      }
1098
 
1099
	      $data = fetchDB($resta, 0);
1100
 
1101
	      if ($data[0] == 0) {
1102
	         $r++;
1103
	         continue;
1104
	      }
1105
	   }
1106
 
1107
	   echo "<tr><td class=\"selakt\">$pr_num&nbsp;$pr_name</td>\n";
1108
 
1109
	   if ($pl_status > 0) {
1110
	      echo "<td class=\"selakt\">" . GetMessage($db, 262, "Projekt") . "</td>\n";
1111
	      echo "<td class=\"selakt\">$mi_nname&nbsp;$mi_vname</td>\n";
1112
	   } else {
1113
	      echo "<td class=\"selakt\"><i>" . GetMessage($db, 234, "Konto") . "</i></td>\n";
1114
	      echo "<td class=\"selakt\">&nbsp;</td>\n";
1115
	   }
1116
 
1117
	   echo "<td class=\"selakt\"></td>\n";
1118
	   echo "<td class=\"selakt\" colspan=$anz></td>\n";
1119
	   echo "<td class=\"selakt\" colspan=5></td></tr>\n";
1120
	   # Abhaengig von der Rolle des angemeldeten Users, werden alle
1121
	   # Tasks pro Mitarbeiter angezeigt.
1122
	   #
1123
	   if ($rstufe == 3) { 		// Mitarbeiter
1124
	      if (!ShowMitarbeiter($db, $unum, $anz, $dvon, $dbis, $pr_num, $pl_num, false)) {
1125
	         closeDB($db);
1126
	         return;
1127
	      }
1128
	   } else if (isset($mitarbeiter) && $mitarbeiter > 0) {
1129
	      if (!ShowMitarbeiter($db, $mitarbeiter, $anz, $dvon, $dbis, $pr_num, $pl_num, false)) {
1130
		 closeDB($db);
1131
		 return;
1132
	      }
1133
	   } else {
1134
	      if ($pl_status > 0) {
1135
	         $query = "select distinct on (al_ressource) al_ressource, mi_nname, mi_vname, pl_lfd ";
1136
		 $query .= "from allocation ";
1137
		 $query .= "left join mitarbeiter on mi_num = al_ressource ";
1138
		 $query .= "left join task on ta_num = al_task and ";
1139
 
1140
		 if (!$ist_future) {
1141
		    $query .= "ta_start <= $dbis ";
1142
		 } else {
1143
		    $query .= "(ta_start between $dvon and $dbis or ";
40 andreas 1144
		    $query .= "ta_start+ta_duration::int8*86400 between $dvon and $dbis or ";
1145
		    $query .= "$dvon between ta_start and ta_start+ta_duration::int8*86400 or ";
1146
		    $query .= "$dbis between ta_start and ta_start+ta_duration::int8*86400) ";
4 andreas 1147
		 }
1148
 
1149
		 $query .= "inner join plan on pl_num = ta_plnum and pl_prnum = $pr_num and pl_status in (2,3,4,5,6) ";
1150
		 $query .= "order by al_ressource, pl_lfd desc, mi_nname, mi_vname";
1151
	      } else {
1152
		 $query = "select mi_num, mi_nname, mi_vname from mitarbeiter ";
1153
		 $query .= "where mi_plan = true order by mi_nname, mi_vname";
1154
	      }
1155
 
1156
	      if (!($resal = QueryDB($db, $query))) {
1157
		 closeDB($db);
1158
		 return;
1159
	      }
1160
 
1161
	      $cnt = numrowsDB($resal);
1162
	      $z = 0;
1163
 
1164
	      while ($z < $cnt) {
1165
	         $data = fetchDB($resal, $z);
1166
	         $al_ressource = $data[0];
1167
 
1168
	         if (!ShowMitarbeiter($db, $al_ressource, $anz, $dvon, $dbis, $pr_num, $pl_num)) {
1169
	            closeDB($db);
1170
	            return;
1171
	         }
1172
 
1173
	         $z++;
1174
	      }
1175
	   }
1176
 
1177
	   $r++;
1178
	}
1179
 
1180
	# Endsummen schreiben
1181
	echo "<tr><td class=\"selnum\" colspan=3>" . GetMessage($db, 378, "Summen:") . "</td>\n";
1182
	$z = 0;
1183
	$sumitot = 0.0;
1184
 
1185
	while ($z < $anz) {
1186
	   printf("<td class=\"selltgray\" align=\"right\"><b>%s</b></td>", FormatNum($sumiarr[$z], 3));
1187
	   $sumitot += $sumiarr[$z];
1188
	   $z++;
1189
	}
1190
 
1191
	printf("<td class=\"selgray\" align=\"right\"><b>%s</b></td>", FormatNum($sumitot, 3));
1192
	printf("<td class=\"selnum\"><b>%s</b></td>", FormatNum($sumallp, 3));
1193
	printf("<td class=\"selnum\"><b>%s</b></td>", FormatNum($sumalli, 3));
1194
 
1195
	if ($ist_erledigung) {
1196
	   if ($sumallp == 0)
1197
	      printf("<td class=\"selnum\"><b>%s%%</b></td>", FormatNum(0.0, 1));
1198
	   else
1199
	      printf("<td class=\"selnum\"><b>%s%%</b></td>", FormatNum($sumalli / $sumallp * 100.0, 1));
1200
	}
1201
 
1202
	echo "</tr>\n";
1203
	echo "</table>\n";
1204
	echo "</form>\n";
1205
	closeDB($db);
1206
}
1207
 
1208
# Folgende Funktion prueft die uebergebenen Parameter und speichert die
1209
# neuen oder veraenderten IST-Zeiten in die Datenbank.
1210
#
1211
function SaveIST() {
1212
	global $unum;
1213
	global $leneinheit;
1214
	global $verrmodul;
1215
	global $stdwhg;
1216
 
1217
	$kill = false;
1218
	$db = OpenDB();
1219
 
1220
	if (!($result = QueryDB($db, "select co_wdone from counter"))) {
1221
	   closeDB($db);
1222
	   return false;
1223
	}
1224
 
1225
	$data = fetchDB($result, 0);
1226
	$co_wdone = $data[0];
1227
 
1228
	foreach ($_REQUEST as $key => $hours) {
1229
	   $fr = substr($key, 0, 3);
1230
 
1231
	   if ($verrmodul) {
1232
	      if ($fr != "dt_" && $fr != "vr_" && $fr != "rk_" && $fr != "am_" &&
1233
	          $fr != "nu_" && $fr != "wh_" && $fr != "tx_" && $fr != "ds_" &&
1234
		  $fr != "de_" && $fr != "ts_" && $fr != "te_" && $fr != "ta_" &&
1235
		  $fr != "pu_" && $fr != "pn_" && $fr != "ni_" && $fr != "mc_" &&
1236
		  $fr != "kf_" && $fr != "md_" && $fr != "pp_" && $fr != "mp_" &&
1237
		  $fr != "cl_" && $fr != "rm_")
1238
	         continue;
1239
	   } else {
1240
	      if ($fr != "dt_")
1241
	         continue;
1242
	   }
1243
 
1244
	   $pars = explode("_", $key);
1245
	   $minum = $pars[1];
1246
	   $pr_num = $pars[2];
1247
	   $wd_task = $pars[3];
1248
	   $dt = $pars[4];
1249
 
1250
	   if ($verrmodul) {
1251
	      $name = "vr_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1252
	      $wd_verr = $_REQUEST[$name];
1253
	      $name = "rk_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1254
	      $wd_rk = $_REQUEST[$name];
1255
	      $name = "am_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1256
	      $dr_amount = $_REQUEST[$name];
1257
	      $name = "nu_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1258
	      $dr_num = $_REQUEST[$name];
1259
	      $name = "wh_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1260
	      $dr_whg = $_REQUEST[$name];
1261
	      $name = "tx_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1262
	      $wd_text = $_REQUEST[$name];
1263
	      $name = "ds_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1264
	      $dr_date_start = $_REQUEST[$name];
1265
	      $name = "de_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1266
	      $dr_date_end = $_REQUEST[$name];
1267
	      $name = "ts_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1268
	      $dr_time_start = $_REQUEST[$name];
1269
	      $name = "te_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1270
	      $dr_time_end = $_REQUEST[$name];
1271
	      $name = "ta_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1272
	      $dr_target = $_REQUEST[$name];
1273
	      $name = "pu_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1274
	      $dr_purpose = $_REQUEST[$name];
1275
	      $name = "pn_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1276
	      $dr_pnightr = $_REQUEST[$name];
1277
	      $name = "ni_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1278
	      $dr_nightr = $_REQUEST[$name];
1279
	      $name = "mc_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1280
	      $dr_kmcar = $_REQUEST[$name];
1281
	      $name = "kf_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1282
	      $dr_kfzkenn = $_REQUEST[$name];
1283
	      $name = "md_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1284
	      $dr_kmdrain = $_REQUEST[$name];
1285
	      $name = "pp_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1286
	      $dr_pkmplain = $_REQUEST[$name];
1287
	      $name = "mp_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1288
	      $dr_kmplain = $_REQUEST[$name];
1289
	      $name = "cl_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1290
	      $dr_costloc = $_REQUEST[$name];
1291
	      $name = "rm_" . $minum . "_" . $pr_num . "_" . $wd_task . "_" . $dt;
1292
	      $dr_remark = $_REQUEST[$name];
1293
 
1294
	      if (!isset($dr_amount))
1295
		 $dr_amount = 0.0;
1296
	      else
1297
		 $dr_amount = str_replace(",", ".", $dr_amount);
1298
 
1299
	      if (!isset($dr_whg) || $dr_whg <= 0)
1300
		 $dr_whg = $stdwhg;
1301
 
1302
	      if (!isset($dr_nightr) || strlen($dr_nightr) <= 0)
1303
		 $dr_nightr = 0.0;
1304
	      else
1305
		 $dr_nightr = str_replace(",", ".", $dr_nightr);
1306
 
1307
	      if (!isset($dr_kmdrain) || strlen($dr_kmdrain) == 0 || !ctype_digit($dr_kmdrain))
1308
	         $dr_kmdrain = 0;
1309
 
1310
	      if (!isset($dr_kmplain) || strlen($dr_kmplain) <= 0)
1311
		 $dr_kmplain = 0.0;
1312
	      else
1313
		 $dr_kmplain = str_replace(",", ".", $dr_kmplain);
1314
 
1315
	      if (!isset($dr_kmcar) || strlen($dr_kmcar) == 0 || !ctype_digit($dr_kmcar))
1316
	         $dr_kmcar = 0;
1317
 
1318
	      if (CheckTrue($dr_pnightr))
1319
		 $dr_pnightr = "true";
1320
	      else
1321
		 $dr_pnightr = "false";
1322
 
1323
	      if (CheckTrue($dr_pkmplain))
1324
		 $dr_pkmplain = "true";
1325
	      else
1326
		 $dr_pkmplain = "false";
1327
 
1328
	      if (isset($dr_date_start) && strlen($dr_date_start) >= 6)
1329
		 $dr_date_start = DateToDBDate($dr_date_start) . " " . $dr_time_start;
1330
	      else
1331
		 $dr_date_start = "";
1332
 
1333
	      if (isset($dr_date_end) && strlen($dr_date_end) >= 6)
1334
		 $dr_date_end = DateToDBDate($dr_date_end) . " " . $dr_time_end;
1335
	      else
1336
		 $dr_date_end = "";
1337
 
1338
	      if (!isset($dr_costloc) || $dr_costloc <= 0)
1339
	         $dr_costloc = "NULL";
1340
	   }
1341
 
1342
	   if ($fr != "dt_")
1343
	      continue;
1344
 
1345
	   if (!isset($hours) || $hours == "")
1346
	      $hours = 0.0;
1347
	   else
1348
	      $hours = str_replace(",", ".", $hours);
1349
 
1350
	   if ($minum <= 0 || $pr_num <= 0 || $wd_task <= 0 || $dt <= 0) {
1351
	      Error("Interner Fehler: Fehlender Parameter!");
1352
	      closeDB($db);
1353
	      return false;
1354
	   }
1355
 
1356
	   $query = "select ta_phase, ta_hash from task where ta_num = $wd_task";
1357
 
1358
	   if (!($resta = QueryDB($db, $query))) {
1359
	      closeDB($db);
1360
	      return false;
1361
	   }
1362
 
1363
	   $data = fetchDB($resta, 0);
1364
	   $ta_phase = $data[0];
1365
	   $ta_hash = $data[1];
1366
 
1367
	   if (!isset($ta_phase))	// Task eines Kontos?
1368
	      $ta_phase = 0;
1369
 
1370
/*	   $query = "select wd_num from wdone where ";
1371
	   $query .= "wd_minum = $minum and wd_task = $wd_task and ";
1372
	   $query .= "wd_datum = $dt ";
1373
*/
1374
	   $query = "select wd_num from wdone, task where ";
1375
	   $query .= "wd_minum = $minum and wd_task = ta_num and ";
1376
	   $query .= "wd_datum = $dt and ta_hash = '$ta_hash'";
1377
 
1378
	   if (!($reswd = QueryDB($db, $query))) {
1379
	      closeDB($db);
1380
	      return false;
1381
	   }
1382
 
1383
	   $anz = numrowsDB($reswd);
1384
 
1385
	   if (!QueryDB($db, "begin")) {
1386
	      closeDB($db);
1387
	      return false;
1388
	   }
1389
 
1390
	   if ($anz > 0) {
1391
	      $data = fetchDB($reswd, 0);
1392
	      $wd_num = $data[0];
1393
 
1394
	      # Kosten loeschen oder schreiben ...
1395
	      if ($verrmodul) {
1396
	         if ($hours <= 0)
1397
	            $query = "delete from dration where dr_wdnum = $wd_num";
1398
	         else {
1399
	            $query = "select count(*) from dration where dr_wdnum = $wd_num";
1400
 
1401
		    if (!($resco = QueryDB($db, $query))) {
1402
		       QueryDB($db, "rollback");
1403
		       closeDB($db);
1404
		       return false;
1405
		    }
1406
 
1407
		    $data = fetchDB($resco, 0);
1408
 
1409
		    if ($data[0] > 0) {
1410
		       if ($wd_rk == "false") {
1411
		          $query = "update dration set dr_amount = $dr_amount, ";
1412
			  $query .= "dr_whg = $dr_whg, dr_costloc = $dr_costloc ";
1413
		       } else {
1414
		          $query = "update dration set dr_amount = $dr_amount, ";
1415
		          $query .= "dr_whg = $dr_whg, dr_date_start = '$dr_date_start',";
1416
		          $query .= "dr_date_end = '$dr_date_end', dr_target = '$dr_target',";
1417
		          $query .= "dr_purpose = '$dr_purpose', dr_pnightr = $dr_pnightr,";
1418
		          $query .= "dr_kmcar = $dr_kmcar, dr_kfzkenn = '$dr_kfzkenn',";
1419
		          $query .= "dr_kmdrain = $dr_kmdrain, dr_pkmplain = $dr_pkmplain,";
1420
		          $query .= "dr_kmplain = $dr_kmplain, dr_costloc = $dr_costloc,";
1421
		          $query .= "dr_nightr = $dr_nightr, dr_remark = '$dr_remark' ";
1422
		       }
1423
 
1424
		       $query .= "where dr_wdnum = $wd_num";
1425
		    } else {
1426
		       if ($wd_rk == false) {
1427
		          $query = "insert into dration (dr_num, dr_nightr, ";
1428
			  $query .= "dr_amount, dr_kmcar, dr_kmdrain, ";
1429
			  $query .= "dr_kmplain, dr_wdnum, dr_whg, dr_costloc) ";
1430
			  $query .= "values ($wd_num, 0, $dr_amount, 0, 0, 0,";
1431
			  $query .= "$wd_num, $dr_whg, $dr_costloc)";
1432
		       } else {
1433
			  $dr_target = addslashes($dr_target);
1434
			  $dr_purpose = addslashes($dr_purpose);
1435
			  $dr_remark = addslashes($dr_remark);
1436
		          $query = "insert into dration (dr_num, dr_date_start, ";
1437
		          $query .= "dr_date_end, dr_target, dr_purpose, dr_pnightr,";
1438
		          $query .= "dr_nightr, dr_amount, dr_kmcar, dr_kfzkenn, ";
1439
		          $query .= "dr_kmdrain, dr_pkmplain, dr_kmplain, dr_wdnum,";
1440
		          $query .= "dr_whg, dr_costloc, dr_remark) values ($wd_num, '$dr_date_start',";
1441
		          $query .= "'$dr_date_end', '$dr_target', '$dr_purpose',";
1442
		          $query .= "$dr_pnightr, $dr_nightr, $dr_amount, $dr_kmcar,";
1443
		          $query .= "'$dr_kfzkenn', $dr_kmdrain, $dr_pkmplain, ";
1444
		          $query .= "$dr_kmplain, $wd_num, $dr_whg, $dr_costloc, '$dr_remark')";
1445
		       }
1446
		    }
1447
	         }
1448
 
1449
	         if (!QueryDB($db, $query)) {
1450
	            QueryDB($db, "rollback");
1451
		    closeDB($db);
1452
		    return false;
1453
	         }
1454
	      }
1455
 
1456
	      # IST-Daten loeschen oder schreiben...
1457
	      if ($hours <= 0)
1458
		 $query = "delete from wdone where wd_num = $wd_num";
1459
	      else {
1460
		 $query = "update wdone set wd_hours = $hours";
1461
 
1462
		 if ($verrmodul) {
1463
		    if (!isset($wd_verr) || CheckTrue($wd_verr))
1464
		       $wd_verr = "true";
1465
		    else
1466
		       $wd_verr = "false";
1467
 
1468
		    if (CheckTrue($wd_rk))
1469
		       $wd_rk = 1;
1470
		    else
1471
		       $wd_rk = 0;
1472
 
1473
		    $query .= ", wd_verr = $wd_verr, wd_rk = $wd_rk, ";
1474
		    $query .= "wd_text = '$wd_text'";
1475
		 }
1476
 
1477
		 $query .= " where wd_num = $wd_num";
1478
	      }
1479
 
1480
	      if (!QueryDB($db, $query)) {
1481
	         QueryDB($db, "rollback");
1482
	         closeDB($db);
1483
	         return false;
1484
	      }
1485
 
1486
	      QueryDB($db, "commit");
1487
	   } else if ($hours > 0) {
1488
	      $co_wdone++;
1489
 
1490
	      if ($verrmodul) {
1491
		 if (!isset($wd_verr) || CheckTrue($wd_verr))
1492
		    $wd_verr = "true";
1493
		 else
1494
		    $wd_verr = "false";
1495
 
1496
		 if (CheckTrue($wd_rk))
1497
		    $wd_rk = 1;
1498
		 else
1499
		    $wd_rk = 0;
1500
	      }
1501
 
1502
	      $query = "insert into wdone (wd_num, wd_prnum, wd_minum, ";
1503
	      $query .= "wd_datum, wd_hours, wd_task, wd_rk, wd_phase, ";
1504
	      $query .= "wd_edit, wd_verr, wd_text) values ($co_wdone, $pr_num, ";
1505
 
1506
	      if ($verrmodul) {
1507
	         $query .= "$minum, $dt, $hours, $wd_task, $wd_rk, $ta_phase,";
1508
	         $query .= "true, $wd_verr, '$wd_text')";
1509
	      } else {
1510
	         $query .= "$minum, $dt, $hours, $wd_task, 0, $ta_phase,";
1511
	         $query .= "true, true, NULL)";
1512
	      }
1513
 
1514
	      if (!QueryDB($db, $query)) {
1515
	         QueryDB($db, "rollback");
1516
		 closeDB($db);
1517
		 return false;
1518
	      }
1519
 
1520
	      if (!QueryDB($db, "update counter set co_wdone = $co_wdone")) {
1521
		 QueryDB($db, "rollback");
1522
		 closeDB($db);
1523
		 return false;
1524
	      }
1525
 
1526
	      if ($verrmodul) {
1527
	         if ($wd_rk == "false") {
1528
		    $query = "insert into dration (dr_num, dr_nightr, ";
1529
		    $query .= "dr_amount, dr_kmcar, dr_kmdrain, ";
1530
		    $query .= "dr_kmplain, dr_wdnum, dr_whg, dr_costloc) ";
1531
		    $query .= "values ($co_wdone, 0, $dr_amount, 0, 0, 0,";
1532
		    $query .= "$co_wdone, $dr_whg, $dr_costloc)";
1533
		 } else {
1534
		    $dr_target = addslashes($dr_target);
1535
		    $dr_purpose = addslashes($dr_purpose);
1536
		    $dr_remark = addslashes($dr_remark);
1537
		    $query = "insert into dration (dr_num, dr_date_start, ";
1538
		    $query .= "dr_date_end, dr_target, dr_purpose, dr_pnightr,";
1539
		    $query .= "dr_nightr, dr_amount, dr_kmcar, dr_kfzkenn, ";
1540
		    $query .= "dr_kmdrain, dr_pkmplain, dr_kmplain, dr_wdnum,";
1541
		    $query .= "dr_whg, dr_costloc, dr_remark) values ($co_wdone, '$dr_date_start',";
1542
		    $query .= "'$dr_date_end', '$dr_target', '$dr_purpose',";
1543
		    $query .= "$dr_pnightr, $dr_nightr, $dr_amount, $dr_kmcar,";
1544
		    $query .= "'$dr_kfzkenn', $dr_kmdrain, $dr_pkmplain, ";
1545
		    $query .= "$dr_kmplain, $co_wdone, $dr_whg, $dr_costloc, '$dr_remark')";
1546
		 }
1547
 
1548
	         if (!QueryDB($db, $query)) {
1549
	            QueryDB($db, "rollback");
1550
		    closeDB($db);
1551
		    return false;
1552
	         }
1553
	      }
1554
 
1555
	      QueryDB($db, "commit");
1556
	   }
1557
	}
1558
 
1559
	Journal(302, "ist.php: SaveIST: Projekt: $pr_num, Mitarbeiter: $minum", $db);
1560
	closeDB($db);
1561
	return true;
1562
}
1563
 
1564
if ($func == "save")
1565
   SaveIST();
1566
 
1567
ManageTime();
1568
 
1569
require_once('footer.inc');
1570
?>