Subversion Repositories public

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 andreas 1
<?
2
require_once('version.inc');
3
require_once('dbaccess.inc');
4
require_once('header.inc');
5
require_once('helper.inc');
6
require_once('crypt.inc');
7
require_once('settings.inc');
8
 
9
$drm = array(true, false, false, false, true, true, true);
10
 
11
$knopf = 0;
12
$func = $_REQUEST['func'];
13
$editplan = $_REQUEST['editplan'];
14
$viewplan = $_REQUEST['viewplan'];
15
$deleteplan = $_REQUEST['deleteplan'];
16
$editcopy = $_REQUEST['editcopy'];
17
$taskadd = $_REQUEST['taskadd'];
18
$deletetask = $_REQUEST['deletetask'];
19
$edittask = $_REQUEST['edittask'];
20
$addmi = $_REQUEST['addmi'];
21
$addmidel = $_REQUEST['addmidel'];
22
$addmiadd = $_REQUEST['addmiadd'];
23
$moveup = $_REQUEST['moveup'];
24
$movedown = $_REQUEST['movedown'];
25
 
26
if (isset($editplan)) {
27
   $headline = 20;
28
   $pl_num = $editplan;
29
} else {
30
   $pl_num = 0;
31
}
32
 
33
if (isset($deleteplan)) {
34
   $headline = 21;
35
}
36
 
37
if (isset($_REQUEST['no'])) {
38
   $headline = 9;
39
}
40
 
41
# Planungsmenue
42
//if (isset($_REQUEST['plan'])) { $knopf = 2; $headline = 9; $menu = 2; }
43
if (isset($_REQUEST['plan'])) { $knopf = 2; $headline = 20; $menu = 2; }
44
 
45
if (isset($_REQUEST['plneu'])) { $knopf = 10; $headline = 19; }
46
if (isset($_REQUEST['plchange'])) { $knopf = 11; $headline = 20; }
47
if (isset($_REQUEST['plumplan'])) { $knopf = 12; }
48
 
49
require_once('menu.inc');
50
require_once('knumber.inc');
51
 
52
# Folgende Funktion zeigt in einer Tabelle die Planstammdaten an, welche
53
# mit Hilfe der Buttons in der ersten Spalte bearbeitet werden koennen.
54
#
55
# Es handelt sich dabei um die Liste der Plaene, die zur Betrachtung oder
56
# auch zur Bearbeitung stehen. Der Projektleiter sieht alle Plaene, bei
57
# denen er Projektleiter ist und der Administrator sieht immer alle
58
# Plaene.
59
#
60
function ShowPlan($rstufe, $menu, $unum, $plnum=0) {
61
	global $rstufe;
62
	global $unum;
63
	global $phase;
64
	global $pmlight;
65
	global $statusbericht;
66
	global $menu;
67
	global $headline;
68
	global $func;
69
 
70
	# Als erstes wird eine Auswahlbox angezeigt, in der der User die
71
	# Anzeige ein wenig individualisieren kann.
72
	$ps_1 = $_REQUEST['ps_1'];
73
	$ps_2 = $_REQUEST['ps_2'];
74
	$ps_3 = $_REQUEST['ps_3'];
75
	$ps_4 = $_REQUEST['ps_4'];
76
	$ps_5 = $_REQUEST['ps_5'];
77
	$ps_6 = $_REQUEST['ps_6'];
78
	$sx_prnum = $_REQUEST['sx_prnum'];
79
	$sx_prname = $_REQUEST['sx_prname'];
80
 
81
	if ($func != "SHOWPLAN") {
82
	   $ps_1 = 1;
83
	   $ps_2 = 1;
84
	   $ps_4 = 1;
85
	}
86
?>
87
<form name="stati" method="post" action="plan.php" onChange="javascript:this.submit()">
88
<input type="hidden" name="menu" value="<? echo "$menu"; ?>">
89
<input type="hidden" name="headline" value="<? echo "$headline"; ?>">
90
<input type="hidden" name="plchange" value="1">
91
<input type="hidden" name="func" value="SHOWPLAN">
92
<table class="input">
93
   <tr>
94
      <th class="sel" colspan=2>Pl&auml;ne mit folgendem Status anzeigen</th>
95
      <th class="sel" colspan=2>Projektsuche</th>
96
   </tr>
97
   <tr>
98
      <td>In Erstellung:</td>
99
      <td><input type="checkbox" name="ps_1" value="1" <? if ($ps_1) echo "checked"; ?>></td>
100
      <td class="input_l">Projektnummer:</td>
101
      <td><input type="text" name="sx_prnum" value="<? echo "$sx_prnum"; ?>" size=8 maxlength=16></td>
102
   </tr>
103
<?
104
	if (!$pmlight) {
105
?>
106
   <tr>
107
      <td>Freigegeben:</td>
108
      <td><input type="checkbox" name="ps_2" value="1" <? if ($ps_2) echo "checked"; ?>></td>
109
      <td rowspan=4 class="input_l">Projektname:</td>
110
      <td rowspan=4 valign="top"><input type="text" name="sx_prname" value="<? echo "$sx_prname"; ?>" size=20 mxlength=100></td>
111
   </tr>
112
<?
113
	}
114
?>
115
   <tr>
116
      <td>Aktiv:</td>
117
      <td><input type="checkbox" name="ps_4" value="1" <? if ($ps_4) echo "checked"; ?>></td>
118
<?
119
	if ($pmlight) {
120
?>
121
      <td rowspan=3 class="input_l">Projektname:</td>
122
      <td rowspan=3 valign="top"><input type="text" name="sx_prname" value="<? echo "$sx_prname"; ?>" size=20 mxlength=100></td>
123
<?
124
	}
125
?>
126
   </tr>
127
   <tr>
128
      <td>Inaktiv:</td>
129
      <td><input type="checkbox" name="ps_5" value="1" <? if ($ps_5) echo "checked"; ?>></td>
130
   </tr>
131
   <tr>
132
      <td>Abgeschlossen:</td>
133
      <td><input type="checkbox" name="ps_6" value="1" <? if ($ps_6) echo "checked"; ?>></td>
134
   </tr>
135
   <tr>
136
      <td class="sel" colspan = 4><center>
137
<?
138
	Button("Selektion durchf&uuml;hren", "stati");
139
?>
140
      </center></td>
141
   </tr>
142
</table>
143
</form>
144
<?
145
	if (!isset($ps_1) && !isset($ps_2) && !isset($ps_3) && !isset($ps_4) && !isset($ps_5) && !isset($ps_6)) {
146
	   echo "<p class=\"cry\">Es wurden keine Pl&auml;ne gefunden!</p>\n";
147
	   return;
148
	}
149
 
150
	$old_prnum = 0;
151
	$db = OpenDB();
152
	$dtdb = GetDBDateFormat(true);
153
	$query = "select pl_num, pl_lfd, pl_prnum, pl_status, pr_name, ";
154
	$query .= "pr_status, to_char(pl_date, '$dtdb'), pl_comment ";
155
	$query .= "from plan, project where pr_num = pl_prnum ";
156
 
157
	if ($rstufe == 2)
158
	   $query .= "and pr_pl = $unum ";
159
 
160
	if (isset($sx_prnum) && strlen($sx_prnum) > 0)
161
	   $query .= "and pr_num = $sx_prnum ";
162
	else if (isset($sx_prname) && strlen($sx_prname) > 0)
163
	   $query .= "and pr_name ilike '$sx_prname%' ";
164
 
165
	$query .= "and pr_status = 0 and pl_status in (";
166
	$komma = false;
167
 
168
	if ($ps_1) {
169
	   $query .= "1";
170
	   $komma = true;
171
	}
172
 
173
	if ($ps_2) {
174
	   if ($komma)
175
	      $query .= ",";
176
 
177
	   $query .= "2";
178
	   $komma = true;
179
	}
180
 
181
	if ($ps_3) {
182
	   if ($komma)
183
	      $query .= ",";
184
 
185
	   $query .= "3";
186
	   $komma = true;
187
	}
188
 
189
	if ($ps_4) {
190
	   if ($komma)
191
	      $query .= ",";
192
 
193
	   $query .= "4";
194
	   $komma = true;
195
	}
196
 
197
	if ($ps_5) {
198
	   if ($komma)
199
	      $query .= ",";
200
 
201
	   $query .= "5";
202
	   $komma = true;
203
	}
204
 
205
	if ($ps_6) {
206
	   if ($komma)
207
	      $query .= ",";
208
 
209
	   $query .= "6";
210
	   $komma = true;
211
	}
212
 
213
	$query .= ") ";
214
	$query .= "order by pl_prnum asc, pl_lfd desc";
215
	$result = QueryDB($db, $query);
216
 
217
	if (!$result) {
218
	   include('footer.inc');
219
	   return;
220
	}
221
 
222
	$numrows = numrowsDB($result);
223
	$nav = "menu=$menu&headline=9&ps_1=$ps_1&ps_2=$ps_2&ps_3=$ps_3&ps_4=$ps_4&ps_5=$ps_5&ps_6=$ps_6";
224
 
225
	if ($numrows > 0) {
226
	   echo "<form name=\"plan\" action=\"plan.php\" method=\"post\">\n";
227
	   echo "<input type=\"hidden\" name=\"pl_num\" value=\"$plnum\">\n";
228
	   echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n";
229
	   echo "<input type=\"hidden\" name=\"headline\" value=\"9\">\n";
230
	   echo "<input type=\"hidden\" name=\"ps_1\" value=\"$ps_1\">\n";
231
	   echo "<input type=\"hidden\" name=\"ps_2\" value=\"$ps_2\">\n";
232
	   echo "<input type=\"hidden\" name=\"ps_3\" value=\"$ps_3\">\n";
233
	   echo "<input type=\"hidden\" name=\"ps_4\" value=\"$ps_4\">\n";
234
	   echo "<input type=\"hidden\" name=\"ps_5\" value=\"$ps_5\">\n";
235
	   echo "<input type=\"hidden\" name=\"ps_6\" value=\"$ps_6\">\n";
236
 
237
	   if ($plnum > 0) {
238
	      echo "<input type=\"hidden\" name=\"func\" value=\"UpdatePlan\">\n";
239
	   }
240
?>
241
<table class="sel">
242
   <tr>
243
      <th class="sel">Aktion</th>
244
      <th class="sel">Lfd.Nr.</th>
245
      <th class="sel">Proj.Nr.</th>
246
      <th class="sel">Projektbezeichnung</th>
247
      <th class="sel">Planstatus</th>
248
<?
249
	if ($statusbericht) {
250
	   echo "      <th class=\"sel\">Statusbericht</th>";
251
	} else {
252
	   echo "      <th class=\"sel\">Beschreibung</th>";
253
	}
254
?>
255
   </tr>
256
<?php
257
	   $old_plnum = 0;
258
	   $oo_prnum = 0;
259
	   $row = 0;
260
	   $inp_com = false;
261
 
262
	   while ($row < $numrows) {
263
	      $data = fetchDB($result, $row);
264
	      $pl_num = $data[0];
265
	      $pl_lfd = $data[1];
266
	      $pl_prnum = $data[2];
267
	      $pl_status = $data[3];
268
	      $pr_name = $data[4];
269
	      $ks_status = $data[5];
270
	      $pl_date = $data[6];
271
	      $pl_comment = $data[7];
272
 
273
	      if ($oo_prnum != $pl_prnum)
274
	         $old_pllfd = $pl_lfd;
275
 
276
	      # Pruefen, ob bereits IST-Buchungen vorgenommen wurden. Wenn ja,
277
	      # dann darf der Plan nicht mehr geloescht werden koennen!
278
	      #
279
	      $query = "select wd_num from wdone, task where ";
280
	      $query .= "wd_prnum = $pl_prnum and ta_num = wd_task and ";
281
	      $query .= "ta_plnum = $pl_num";
282
 
283
	      if (!($resta = QueryDB($db, $query)))
284
	         return;
285
 
286
	      if (numrowsDB($resta) <= 0)
287
	         $del = true;
288
	      else
289
	         $del = false;
290
 
291
	      echo "<tr><td class=\"selakt\"><table border=0 cellspacing=0 cellpadding=0><tr>";
292
 
293
	      if ($pl_status < 3 && $old_prnum != $pl_prnum) {
294
	         echo "<td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php','editplan=$pl_num&$nav')\"><img src=\"image/edit.png\" border=0 alt=\"Edit\"></a></td>";
295
		 $old_prnum = $pl_prnum;
296
		 $inp_com = true;
297
	      } else {
298
	         echo "<td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php','viewplan=$pl_num&$nav')\"><img src=\"image/view.png\" width=15 height=15 border=0 alt=\"View\"></a></td>";
299
	      }
300
 
301
	      if ($del && $pl_status < 4 && ($rstufe == 1 || $rstufe == 2))
302
	         echo "<td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php','deleteplan=$pl_num&$nav')\"><img src=\"image/editdelete.png\" border=0 alt=\"Delete\"></a></td>";
303
 
304
	      if ($pl_status > 1 && $pl_status < 5) {
305
		 echo "<td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php','editcopy=$pl_num&pl_prnum=$pl_prnum&pl_status=1&$nav')\"><img src=\"image/editcopy.png\" border=0 alt=\"Copy\"></a></td>";
306
		 echo "<td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php','func=LockM&pl_num=$pl_num&pl_prnum=$pl_prnum&pl_status=$pl_status&$nav')\"><img src=\"image/month.png\" border=0 alt=\"Copy\"></a></td>";
307
	      }
308
 
309
	      echo "</tr></table>";
310
	      echo "</td>\n<td class=\"selnum\">$pl_lfd</td>\n<td class=\"selnum\">$pl_prnum</td>\n";
311
 
312
	      if ($inp_com) {
313
	         echo "<td class=\"sel\">";
314
		 echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','editplan=$pl_num&$nav')\">";
315
		 echo "$pr_name</a></td>\n";
316
		 $inp_com = false;
317
	      } else
318
	         echo "<td class=\"sel\">$pr_name</td>\n";
319
 
320
	      if ($plnum == $pl_num) {
321
	         echo "<td sel=\"sel\"><select name=\"pl_status\">\n";
322
		 $status = $_REQUEST['pl_status'];
323
 
324
		 if ($status == 3)
325
		    $j = 4;
326
		 else
327
		    $j = 1;
328
 
329
		 for ($i = $j; $i <= 6; $i++) {
330
		    if (($i == 2 && $pmlight) || $i == 3 || $i == 5)
331
		       continue;
332
 
333
		    if ($status == $i)
334
		       echo "<option value=\"$i\" selected>";
335
		    else
336
		       echo "<option value=\"$i\">";
337
 
338
	            switch ($i) {
339
	               case 1: echo "In Erstellung (&auml;nderbar, nicht bebuchbar)"; break;
340
		       case 2: echo "Freigegeben (&auml;nderbar, bebuchbar)"; break;
341
//		       case 3: echo "Wartet auf Genehmigung"; break;
342
		       case 4: echo "Aktiv (nicht &auml;nderbar, bebuchbar)"; break;
343
		       case 5: echo "Inaktiv (nicht &auml;nderbar, nicht bebuchbar)"; break;
344
		       case 6: echo "Abgeschlossen (Projekt ist abgeschlossen)"; break;
345
//		       default: echo "In Erstellung";
346
	            }
347
 
348
		    echo "</option>\n";
349
		 }
350
 
351
		 echo "</select>";
352
		 Button("Speichern", "plan");
353
		 echo "</td>\n";
354
	      } else if ($oo_prnum != $pl_prnum && $old_pllfd >= $pl_lfd) {
355
	         echo "<td class=\"sel\">";
356
 
357
		 if ($pl_status < 4 || $rstufe == 1 || $rstufe == 4) {
358
		    echo "<a href=\"#\" onClick=";
359
	            echo "\"javascript:MoveTo('plan.php','pl_num=$pl_num&pl_status=$pl_status&func=EditPlStatus&$nav')\">\n";
360
		 }
361
 
362
	         switch ($pl_status) {
363
	            case 1: echo "In Erstellung"; break;
364
		    case 2: echo "Freigegeben"; break;
365
		    case 3: echo "Wartet auf Genehmigung"; break;
366
		    case 4: echo "Aktiv"; break;
367
		    case 5: echo "Inaktiv"; break;
368
		    case 6: echo "Abgeschlossen"; break;
369
		    default: echo "In Erstellung";
370
	         }
371
 
372
	         if ($pl_status < 4)
373
		    echo "</a>";
374
 
375
		 echo "</td>";
376
		 $oo_prnum = $pl_prnum;
377
		 $inp_com = true;
378
	      } else {
379
	         echo "<td class=\"sel\">\n";
380
 
381
	         switch ($pl_status) {
382
	            case 1: echo "In Erstellung"; break;
383
		    case 2: echo "Freigegeben"; break;
384
		    case 3: echo "Wartet auf Genehmigung"; break;
385
		    case 4: echo "Aktiv"; break;
386
		    case 5: echo "Inaktiv"; break;
387
		    case 6: echo "Abgeschlossen"; break;
388
		    default: echo "In Erstellung";
389
	         }
390
 
391
	         echo "</td>\n";
392
	      }
393
 
394
	      # Kommentar / Beschreibung / Statusbericht
395
	      if ($statusbericht) {
396
	         $query = "select ps_prstat from planstatus where ";
397
	         $query .= "ps_prnum = $pl_prnum  and ps_status = true and ";
398
	         $query .= "ps_plnum = $pl_num ";
399
		 $query .= "order by ps_lfd desc";
400
 
401
	         if (!($resps = QueryDB($db, $query))) {
402
	            closeDB($db);
403
		    return;
404
	         }
405
 
406
		 $anzps = numrowsDB($resps);
407
 
408
		 if ($anzps > 0) {
409
		    $data = fetchDB($resps, 0);
410
	            $ps_prstat = $data[0];
411
		 } else
412
		    $ps_prstat = 3;
413
 
414
	         echo "<td class=\"sel\">$pl_date&nbsp;&nbsp;<img src=\"";
415
 
416
		 switch ($ps_prstat) {
417
		    case 0: echo "image/cool.gif\" alt=\"Gruen"; break;
418
		    case 1: echo "image/shocked.gif\" alt=\"Gelb"; break;
419
		    case 2: echo "image/sad.gif\" alt=\"Rot"; break;
420
		    default: echo "image/huh.gif\" alt=\"Undefiniert";
421
		 }
422
 
423
		 echo "\" width=17 height=17>";
424
 
425
	         if ($inp_com && $pl_status > 1 && $pl_status < 5) {
426
		    echo "&nbsp;&nbsp;<a href=\"#\" ";
427
		    echo "onClick=\"javascript:MoveTo('plan.php','func=PLANSTATUS&pr_num=$pl_prnum&pl_num=$pl_num&$nav')\">";
428
		    echo "<img src=\"image/edit.png\" border=0 alt=\"Statusbericht\"></a>";
429
		 } else if ($pl_status > 4) {
430
		    echo "&nbsp;&nbsp;<a href=\"#\" ";
431
		    echo "onClick=\"javascript:MoveTo('plan.php','func=PLANSTATUS&lock=1&pr_num=$pl_prnum&pl_num=$pl_num&$nav')\">";
432
		    echo "<img src=\"image/view.png\" border=0 alt=\"Statusbericht ansehen\" width=15 height=15></a>";
433
		 }
434
 
435
		 echo "</td>\n";
436
		 $inp_com = false;
437
	      } else {
438
	         echo "<td class=\"sel\"><table border=0 cellspacing=0 cellpadding=0><tr><td>$pl_date&nbsp;&nbsp;</td><td>";
439
		 $inp_com = false;
440
		 echo substr($pl_comment, 0, 30);
441
		 echo "</td></tr></table></td>\n";
442
	      }
443
 
444
	      echo "</tr>\n";
445
	      $row++;
446
	   }
447
 
448
	   echo "</table>\n";
449
 
450
	   if ($plnum > 0)
451
	      echo "</form>\n";
452
	} else {
453
	   echo "<p class=\"cry\">Es wurden keine Pl&auml;ne gefunden!</p>\n";
454
	}
455
 
456
	closeDB($db);
457
}
458
 
459
function AskClosePlan($anz) {
460
	$headline = $_REQUEST['headline'];
461
	$menu = $_REQUEST['menu'];
462
	$pl_num = $_REQUEST['pl_num'];
463
	$pl_status = $_REQUEST['pl_status'];
464
	$nav = "pl_num=$pl_num&pl_status=$pl_status&menu=$menu&func=WriteStatus&headline=21";
465
?>
466
<br>
467
<form action="plan.php" method="post">
468
<table border=2 class="alarm">
469
   <tr><td colspan=2><big>Warnung!</big><br><br>
470
           Es existieren noch <? echo "$anz"; ?> Tasks, die noch nicht zu
471
           Ende sind.<br>
472
           Wenn Sie diesen Plan nun abschliessen, k&ouml;nnen Sie keine
473
           IST-Buchungen mehr auf dieses Projekt vornehmen. Sobald ein Plan
474
           abgeschlossen ist, ist das gesamte Projekt abgeschlossen!
475
	   <br><br>
476
	   Wollen Sie wirklich dieses Projekt abschliessen?
477
      </td>
478
   </tr>
479
   <tr>
480
      <td><center><input type="button" name="yes" value="Projekt Abschliessen" onClick="javascript:MoveTo('plan.php','yes=yes&<? echo "$nav"; ?>')"></center></td>
481
      <td><center><input type="button" name="no" value="Abbruch" onClick="javascript:MoveTo('plan.php','no=no&<? echo "$nav"; ?>')"></center></td>
482
   </tr>
483
</table>
484
</form>
485
<?php
486
}
487
 
488
# Folgende Funktion schreibt den (eventuell) geaenderten Status eines Plans
489
# in die Datenbank.
490
#
491
function UpdatePlan($write=false) {
492
	global $rstufe;
493
	global $phase;
494
	global $pmlight;
495
 
496
	if ($rstufe != 1 && $rstufe != 2) {
497
	   Error("Error: Berechtigungsfehler!<br>\n");
498
	   return false;
499
	}
500
 
501
	$pl_num = $_REQUEST['pl_num'];
502
	$pl_status = $_REQUEST['pl_status'];
503
 
504
	if (!isset($pl_num) || $pl_num <= 0) {
505
	   Error("Interner Fehler: Plannummer fehlt!<br>");
506
	   return false;
507
	}
508
 
509
	if (!isset($pl_status) || $pl_status < 1 || $pl_status > 6) {
510
	   Error("Interner Fehler: Fehlender oder ung&uuml;ltiger Status!<br>");
511
	   return false;
512
	}
513
 
514
	$db = OpenDB();
515
 
516
	# Bevor wir den Planstatus von 6 tatsaechlich schreiben pruefen wir, ob
517
	# nicht noch ein Task des Plans offen ist. Ist dem so, warnen wir dem
518
	# User und weisen ihn auf die Konsequenzen hin.
519
	if (!$write && $pl_status == 6) {
520
	   $today = time();
521
	   $query = "select count(*) from task where ";
522
	   $query .= "ta_plnum = $pl_num and ta_start+(ta_duration*86400) > $today and ";
523
	   $query .= "ta_level > 1";
524
 
525
	   if (!($result = QueryDB($db, $query)))
526
	      return false;
527
 
528
	   $data = fetchDB($result, 0);
529
	   $anz = $data[0];
530
 
531
	   if ($anz > 0) {
532
	      AskClosePlan($anz);
533
	      return true;
534
	   }
535
	}
536
 
537
	# Handelt es sich um den Planstatus 1 pruefen wir, ob der Plan
538
	# zuvor nicht bereits einen anderen Status hatte und wenn ja, ob
539
	# IST-Buchungen vorgenommen wurden. Trifft das zu, darf der Status
540
	# nicht auf 1 gesetzt werden.
541
	if ($pl_status == 1) {
542
	   $query = "select count(*) from wdone, task where ";
543
	   $query .= "ta_plnum = $pl_num and wd_task = ta_num";
544
 
545
	   if (!($result = QueryDB($db, $query)))
546
	      return false;
547
 
548
	   $data = fetchDB($result, 0);
549
	   $anz = $data[0];
550
 
551
	   if ($anz > 0) {
552
	      Error("Auf diesem Plan sind bereits IST-Buchungen vorhanden! Der Planstatus kann daher nicht auf \"In Erstellung\" zur&uuml;ck gesetzt werden!");
553
	      return false;
554
	   }
555
	}
556
 
557
	# In der strikten Periodensicht ($pmlight == true), darf der Status nur
558
	# dann auf > 1 gesetzt werden, wenn es einen Kommentar zum Plan gibt.
559
	# Falls es also keinen Kommentar gibt, wird dieser automatisch erzeugt.
560
	#
561
	if ($pmlight && $pl_status > 1) {
562
	   $query = "select pl_comment from plan where pl_num = $pl_num";
563
 
564
	   if (!($result = QueryDB($db, $query)))
565
	      return false;
566
 
567
	   $data = fetchDB($result, 0);
568
	   $pl_comment = $data[0];
569
 
570
	   if (!isset($pl_comment) || strlen($pl_comment) <= 0) {
571
	      $query = "update plan set pl_comment = 'Statusänderung am " . date("j.n.Y") . "' ";
572
	      $query .= "where pl_num = $pl_num";
573
 
574
	      if (!QueryDB($db, $query))
575
	         return false;
576
 
577
	      Error("Der fehlende Kommentar zum Plan wurde automatisch eingef&uuml;gt!");
578
	   }
579
	}
580
 
581
	$query = "update plan set pl_status = $pl_status ";
582
 
583
	if ($pl_status == 4)
584
	   $query .= ", pl_date = current_timestamp ";
585
 
586
	$query .= "where pl_num = $pl_num";
587
 
588
	if (!TQueryDB($db, $query)) {
589
	   closeDB($db);
590
	   return false;
591
	}
592
 
593
	# Handelt es sich nicht um den ersten Plan eines Projekts,
594
	# muessen alle aelteren Instanzen auf Inaktiv gesetzt werden.
595
	# Ausgenommen sind Plaene die Abgeschlossen sind (Status = 6).
596
	# Status 1 darf nur dann gesetzt werden koennen, wenn der
597
	# Plan noch keine IST-Buchungen hat. Ein neuerliches setzen
598
	# von Status 1 bewirkt, dass der folgende Plan auf 4 gesetzt
599
	# wird.
600
	$query = "select pl_prnum from plan where pl_num = $pl_num";
601
 
602
	if (!($result = QueryDB($db, $query)))
603
	   return false;
604
 
605
	$data = fetchDB($result, 0);
606
	$pl_prnum = $data[0];
607
 
608
	$query = "select pl_num, pl_status from plan where ";
609
	$query .= "pl_prnum = $pl_prnum and pl_num != $pl_num and ";
610
	$query .= "pl_status != 6 order by pl_lfd desc";
611
 
612
	if (!($result = QueryDB($db, $query)))
613
	   return false;
614
 
615
	$numrows = numrowsDB($result);
616
	$status = ($pl_status == 6) ? 6 : 5;
617
 
618
	if ($numrows > 0) {
619
	   QueryDB($db, "begin");
620
	   $j = 0;
621
 
622
	   while ($j < $numrows) {
623
	      $data = fetchDB($result, $j);
624
	      $pl_num = $data[0];
625
	      $pst = $data[1];
626
 
627
	      if ($j == 0 && $status != 6 && $pl_status == 1)
628
	         $query = "update plan set pl_status = 4, pl_date = current_timestamp ";
629
	      else
630
	         $query = "update plan set pl_status = $status ";
631
 
632
	      $query .= "where pl_num = $pl_num";
633
 
634
	      if ($pst != $status || ($j == 0 && $status != 6 && $pl_status == 1)) {
635
	         if (!QueryDB($db, $query)) {
636
		    QueryDB($db, "rollback");
637
		    closeDB($db);
638
		    return false;
639
	         }
640
	      }
641
 
642
	      $j++;
643
	   }
644
 
645
	   QueryDB($db, "commit");
646
	}
647
 
648
	closeDB($db);
649
	return true;
650
}
651
 
652
# Folgende Funktion speichert die zuvor erfassten Planstammdaten. Da die
653
# Erfassung ohnehin nur mittels ComboBox (select) moeglich ist, kann eine
654
# Plausibilitaetspruefung entfallen.
655
#
656
function SaveNewPlan() {
657
	global $phase;
658
 
659
	$pl_prnum = $_REQUEST['pl_prnum'];
660
	$pl_status = $_REQUEST['pl_status'];
661
	$te_num = $_REQUEST['te_num'];
662
 
663
	$db = OpenDB();
664
	#
665
	# Zunaechst muessen wir die laufende Nummer (pl_lfd) ermitteln...
666
	#
667
	$query = "select pl_lfd, pl_status, pl_num from plan where ";
668
	$query .= "pl_prnum = $pl_prnum order by pl_lfd desc";
669
 
670
	if (!($respl = QueryDB($db, $query))) {
671
	   closeDB($db);
672
	   return 0;
673
	}
674
 
675
	$numrows = numrowsDB($respl);
676
 
677
	if ($numrows > 0) {
678
	   $data = fetchDB($respl, 0);
679
	   $pl_lfd = $data[0] + 1;
680
	} else {
681
	   $pl_lfd = 1;
682
	}
683
 
684
	$query = "select co_plan from counter";
685
	$result = QueryDB($db, $query);
686
	$data = fetchDB($result, 0);
687
	$pl_num = $data[0] + 1;
688
 
689
	QueryDB($db, "begin");
690
	$query = "insert into plan (pl_num, pl_lfd, pl_prnum, pl_status) ";
691
	$query .= "values ($pl_num, $pl_lfd, $pl_prnum, $pl_status)";
692
 
693
	if (!QueryDB($db, $query)) {
694
	   QueryDB($db, "rollback");
695
	   closeDB($db);
696
	   return 0;
697
	}
698
 
699
	$query = "update counter set co_plan = $pl_num";
700
 
701
	if (!QueryDB($db, $query)) {
702
	   QueryDB($db, "rollback");
703
	   closeDB($db);
704
	   return 0;
705
	}
706
 
707
	# Handelt es sich nicht um den ersten Plan eines Projekts,
708
	# muessen alle aelteren Instanzen auf Inaktiv gesetzt werden.
709
	# Ausgenommen sind Plaene die Abgeschlossen sind (Status = 6)
710
	if ($numrows > 0 && $pl_status > 1) {
711
	   $j = 0;
712
 
713
	   while ($j < $numrows) {
714
	      $data = fetchDB($respl, $j);
715
	      $plstatus = $data[1];
716
	      $plnum = $data[2];
717
 
718
	      if ($plstatus != 6) {
719
		 $query = "update plan set pl_status = 5, pl_date = current_timestamp ";
720
		 $query .= "where pl_num = $plnum";
721
 
722
		 if (!QueryDB($db, $query)) {
723
		    QueryDB($db, "rollback");
724
		    closeDB($db);
725
		    return 0;
726
		 }
727
	      }
728
 
729
	      $j++;
730
	   }
731
	}
732
 
733
	QueryDB($db, "commit");
734
 
735
	# Wenn ein Template ausgew�lt wurde, muss es ausgelesen werden
736
	# und als Plan angelegt werden.
737
	if (isset($te_num) && $te_num > 0) {
738
	   $query = "select co_task from counter";
739
	   $result = QueryDB($db, $query);
740
 
741
	   if (!$result) {
742
	      closeDB($db);
743
	      return 0;
744
	   }
745
 
746
	   $data = fetchDB($result, 0);
747
	   $co_task = $data[0];
748
 
749
	   $query = "select pt_lfd, pt_level, pt_name, pt_color, pt_meeting, ";
750
	   $query .= "pt_phase from ptemp where pt_tnum = $te_num ";
751
	   $query .= "order by pt_lfd";
752
	   $result = QueryDB($db, $query);
753
 
754
	   if (!$result) {
755
	      closeDB($db);
756
	      return 0;
757
	   }
758
 
759
	   $numrows = numrowsDB($result);
760
	   $row = 0;
761
	   QueryDB($db, "begin");
762
 
763
	   while ($row < $numrows) {
764
	      $data = fetchDB($result, $row);
765
	      $pt_lfd = $data[0];
766
	      $pt_level = $data[1];
767
	      $pt_name = $data[2];
768
	      $pt_color = $data[3];
769
	      $pt_meeting = $data[4];
770
	      $pt_phase = $data[5];
771
 
772
	      if ($pt_meeting == "t")
773
	         $pt_meeting = 1;
774
	      else
775
	          $pt_meeting = 0;
776
 
777
	      $ta_start = time();
778
	      $co_task++;
779
	      $query = "insert into task (ta_num, ta_plnum, ta_id, ta_name, ";
780
	      $query .= "ta_color, ta_shape, ta_meeting, ta_start, ";
781
	      $query .= "ta_duration, ta_complete, ta_priority, ta_level, ";
782
	      $query .= "ta_phase) values ($co_task, $pl_num, $pt_lfd, ";
783
	      $query .= "'$pt_name', $pt_color, '0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0',";
784
	      $query .= "$pt_meeting, $ta_start, 1, 0, 1, $pt_level, $pt_phase)";
785
 
786
	      if (!QueryDB($db, $query)) {
787
		 QueryDB($db, "rollback");
788
		 closeDB($db);
789
		 return 0;
790
	      }
791
 
792
	      $row++;
793
	   }
794
 
795
	   $query = "update counter set co_task = $co_task";
796
 
797
	   if (!QueryDB($db, $query)) {
798
	      QueryDB($db, "rollback");
799
	      closeDB($db);
800
	      return 0;
801
	   }
802
 
803
	   QueryDB($db, "commit");
804
	}
805
 
806
	Journal(300, "plan.php: SaveNewPlan: plan=$pl_num", $db);
807
	closeDB($db);
808
	return $pl_num;
809
}
810
 
811
# Folgende Funktion zeigt die Erfassungsmaske fuer einen Task an. Es muss
812
# die interne Datensatznummer des Plans uebergeben werden auf die sich der
813
# Task bezieht und die ID, also die laufende Nummer. Diese laufende Nummer
814
# stellt sicher, das die Tasks immer in der richtigen Reihenfolge angezeigt
815
# werden.
816
#
817
function AddTask($ta_plnum, $ta_id) {
818
	$menu = $_REQUEST['menu'];
819
	global $unum;
820
	global $rstufe;
821
	global $phase;
822
	global $VisualDate;
823
	global $pmlight;
824
	global $verrmodul;
825
 
826
	if (!isset($ta_plnum) || $ta_plnum <= 0) {
827
	   Error("Error: Interner Fehler!<br>Funktion AddTask fehlt Parameter 1!<br>");
828
	   return;
829
	}
830
 
831
	$db = OpenDB();
832
	# Projektnummer und Projektname ermitteln
833
	$query = "select plan.pl_prnum, project.pr_name from plan, project ";
834
	$query .= "where plan.pl_num = $ta_plnum and ";
835
	$query .= "project.pr_num = plan.pl_prnum";
836
	$result = QueryDB($db, $query);
837
	$data = fetchDB($result, 0);
838
	$pl_prnum = $data[0];
839
	$pr_name = $data[1];
840
 
841
	# Finden des vorhergehenden Tasks um den Level vorzuschlagen.
842
	$query = "select ta_level, ta_meeting, ta_phase from task where ta_plnum = $ta_plnum and ";
843
	$query .= "ta_id < $ta_id order by ta_id desc";
844
 
845
	if (!($result = QueryDB($db, $query))) {
846
	   closeDB($db);
847
	   return;
848
	}
849
 
850
	if (numrowsDB($result) > 0) {
851
	   $data = fetchDB($result, 0);
852
	   $level = $data[0];
853
	   $ta_meeting = $data[1];
854
	   $ta_phase = $data[2];
855
 
856
	   if ($level == 1)
857
	      $level = 2;
858
	} else {
859
	   $level = 1;
860
	   $ta_meeting = 0;
861
	   $ta_phase = 0;
862
	}
863
?>
864
<br>
865
<form name="Task" action="plan.php" method="post">
866
<input type="hidden" name="ta_plnum" value="<? echo "$ta_plnum"; ?>">
867
<input type="hidden" name="headline" value="20">
868
<input type="hidden" name="menu" value="<? echo "$menu"; ?>">
869
<input type="hidden" name="ta_id" value="<? echo "$ta_id"; ?>">
870
<input type="hidden" name="func" value="SaveTask">
871
<?
872
	if (!$verrmodul)
873
	   echo "<input type=\"hidden\" name=\"ta_risiko\" value=\"0\">\n";
874
?>
875
<table class="input">
876
   <tr>
877
      <th class="sel" colspan=2>Projekt: <? echo "$pl_prnum $pr_name"; ?></th>
878
   </tr>
879
   <tr>
880
      <td>Level:</td>
881
      <td>
882
<?
883
	echo "<input type=\"text\" class=\"inputmust\" name=\"ta_level\" value=\"$level\" ";
884
 
885
	if ($ta_meeting)
886
	   echo "onBlur=\"NumRange(this,1,$level)\" ";
887
	else
888
	   echo "onBlur=\"NumRange(this,1,99)\" ";
889
 
890
	echo "size=2 maxlength=2>";
891
?>
892
      </td>
893
   </tr>
894
   <tr>
895
      <td>Taskname:</td>
896
      <td><input type="text" class="inputmust" name="ta_name" size=40 maxlength=50></td>
897
   </tr>
898
<?
899
        if (!$pmlight) { ?>
900
   <tr>
901
      <td>Farbe:</td>
902
      <td><input type="text" class="inputmust" name="ta_color" value="ffffcc" size=8 maxlength=6>
903
<?php
904
	   echo "<button type=\"button\" onClick=\"javascript:open_window('plan.php?unum=$unum&rstufe=$rstufe&header=1&func=GetColor', 'Farbwahl', 217, 57)\">";
905
	   echo "<img src=\"image/coloredit.png\" border=0 width=15 height=15 alt=\"Farbwahl\"></button>";
906
	   echo "</td>\n</tr>\n";
907
	} else {
908
	   echo "<input type=\"hidden\" name=\"ta_color\" value=\"ffffcc\">\n";
909
	}
910
?>
911
   <tr>
912
      <td>Meilenstein:</td>
913
      <td><input type="checkbox" name="ta_meeting" value="1" onChange="javascript:if (this.checked == true) {document.Task.ende.value = document.Task.start.value;}"></td>
914
   </tr>
915
<?php
916
	if ($phase == 1) {
917
	   echo "<tr><td>Phase:</td>\n<td>";
918
	   $query = "select kp_num, kp_phase from key_phase order by kp_num";
919
	   $result = QueryDB($db, $query);
920
 
921
	   if (!result)
922
	      return;
923
 
924
	   $numrows = numrowsDB($result);
925
	   $row = 0;
926
	   echo "<select name=\"ta_phase\">\n";
927
 
928
	   while ($row < $numrows) {
929
	      $data = fetchDB($result, $row);
930
	      $kp_num = $data[0];
931
	      $kp_phase = $data[1];
932
 
933
	      if ($kp_num == $ta_phase)
934
	         echo "<option value=\"$kp_num\" selected>$kp_num. $kp_phase</option>\n";
935
	      else
936
	         echo "<option value=\"$kp_num\">$kp_num. $kp_phase</option>\n";
937
 
938
	      $row++;
939
	   }
940
 
941
	   echo "</td></tr>\n";
942
	} else {
943
	   $ta_phase = 0;
944
	}
945
?>
946
   <tr>
947
      <td>Startdatum (<? echo "$VisualDate"; ?>):</td>
948
      <td><input type="text" class="inputmust" name="start" onChange="javascript:CheckDate(this, false)" onBlur="javascript:if (document.Task.ta_meeting.checked == true) {document.Task.ende.value = this.value;}" size=10 maxlength=10>
949
          <input type="button" value="..." onClick="javascript:open_window('calendar.php?header=1&target=window.opener.document.Task.start', 'Calendar', 200, 250)">
950
      </td>
951
   </tr>
952
   <tr>
953
      <td>Endedatum (<? echo "$VisualDate"; ?>):</td>
954
      <td><input type="text" class="inputmust" name="ende" onChange="javascript:var stat = CheckDate(this, false);if (stat == true) {CheckDateOrder(document.Task.start, this);}" size=10 maxlength=10>
955
	  <input type="button" value="..." onClick="javascript:open_window('calendar.php?header=1&target=window.opener.document.Task.ende', 'Calendar', 200, 250)">
956
      </td>
957
   </tr>
958
<?
959
	if ($verrmodul) {
960
?>
961
   <tr>
962
      <td>Risikoaufschlag:</td>
963
      <td><input type="text" name="ta_risiko" value="0" onBlur="javascript:NumRange(this,0,100)" size="3" maxlength=3>%</td>
964
   </tr>
965
<?
966
	}
967
?>
968
   <tr>
969
      <td>Bereits erledigt:</td>
970
      <td><input type="text" name="ta_complete" value="0" size=3 maxlength=3>%</td>
971
   </tr>
972
   <tr>
973
      <td>Priorit&auml;t:</td>
974
      <td><select name="ta_priority">
975
             <option value="0">Niedrig</option>
976
	     <option value="1" selected>Normal</option>
977
	     <option value="2">Hoch</option>
978
	  </select>
979
      </td>
980
   </tr>
981
   <tr>
982
      <td>Abh&auml;ngigkeit:</td>
983
      <td><select name="ta_depend">
984
             <option selected></option>
985
<?php
986
	SelectTask($ta_plnum, true);
987
	closeDB($db);
988
?>
989
          </select>
990
	  <select name="ta_deptype">
991
	     <option value="2">Ende-Beginn</option>
992
	     <option value="3">Ende-Ende</option>
993
	     <option value="4">Beginn-Ende</option>
994
	     <option value="1">Beginn-Beginn</option>
995
	  </select>
996
      </td>
997
   </tr>
998
   <tr>
999
      <td valign="top">Kommentar:</td>
1000
      <td><textarea name="ta_notiz" rows=5 cols=60></textarea></td>
1001
   </tr>
1002
   <tr>
1003
      <td class="selnf" colspan=2>
1004
         <table border=0 cellspacing=0 cellpadding=0><tr><td>
1005
<?
1006
	Button("Task Speichern", "Task");
1007
	echo "</td><td>&nbsp;&nbsp;</td><td>";
1008
	ButtonLink("Zur&uuml;ck", "plan.php", "editplan=$ta_plnum&menu=$menu&headline=20");
1009
?>
1010
        </td></tr></table>
1011
      </td>
1012
   </tr>
1013
</table>
1014
<br>
1015
<?php
1016
	echo "</form>\n";
1017
}
1018
 
1019
# Folgende Funktion zeigt die Erfassungsmaske fuer einen Task an. Es muss
1020
# die interne Datensatznummer des Plans uebergeben werden auf die sich der
1021
# Task bezieht.
1022
#
1023
function EditTask($ta_num) {
1024
	global $dtformatshort;
1025
	global $VisualDate;
1026
	global $verrmodul;
1027
 
1028
	$menu = $_REQUEST['menu'];
1029
	global $unum;
1030
	global $rstufe;
1031
	global $phase;
1032
	global $numphase;
1033
	global $pmlight;
1034
 
1035
	$db = OpenDB();
1036
	$query = "select ta_plnum, ta_id, ta_depend, ta_deptype, ta_name, ";
1037
	$query .= "ta_color, ta_meeting, ta_start, ta_duration, ta_complete, ";
1038
	$query .= "ta_priority, ta_level, ta_phase, ta_notiz, ta_risiko from task ";
1039
	$query .= "where ta_num = $ta_num";
1040
 
1041
	$result = QueryDB($db, $query);
1042
	$numrows = numrowsDB($result);
1043
 
1044
	if ($numrows != 1) {
1045
	   Error("Interner Fehler: Task \"$ta_num\" existiert nicht!<br>");
1046
	   return;
1047
	}
1048
 
1049
	$data = fetchDB($result, 0);
1050
	$ta_plnum = $data[0];
1051
	$ta_id = $data[1];
1052
	$ta_depend = $data[2];
1053
	$ta_deptype = $data[3];
1054
	$ta_name = $data[4];
1055
	$ta_color = $data[5];
1056
	$ta_meeting = $data[6];
1057
	$ta_start = $data[7];
1058
	$ta_duration = $data[8];
1059
	$ta_complete = $data[9];
1060
	$ta_priority = $data[10];
1061
	$ta_level = $data[11];
1062
	$ta_phase = $data[12];
1063
	$ta_notiz = $data[13];
1064
	$ta_risiko = $data[14];
1065
	$color = dechex($ta_color);
1066
	$len = strlen($color);
1067
 
1068
	while ($len < 6) {
1069
	   $color = "0" . $color;
1070
	   $len++;
1071
	}
1072
 
1073
	# Ermitteln, ob der Task bereits Mitarbeiter zugewiesen hat. In
1074
	# diesem Fall darf der Level nicht geaendert werden und es darf
1075
	# kein Meilenstein werden.
1076
	$query = "select count(*) from allocation where al_task = $ta_num";
1077
 
1078
	if (!($result = QueryDB($db, $query))) {
1079
	   closeDB($db);
1080
	   return;
1081
	}
1082
 
1083
	$data = fetchDB($result, 0);
1084
	$anz = $data[0];
1085
 
1086
	$query = "select plan.pl_prnum, project.pr_name from plan, project ";
1087
	$query .= "where plan.pl_num = $ta_plnum and ";
1088
	$query .= "project.pr_num = plan.pl_prnum";
1089
	$result = QueryDB($db, $query);
1090
	$data = fetchDB($result, 0);
1091
	$pl_prnum = $data[0];
1092
	$pr_name = $data[1];
1093
	echo "<p class=\"cry\">Projekt: $pl_prnum $pr_name</p>";
1094
	# Start des Tasks ermitteln. Gibt es breits IST-Buchungen auf
1095
	# diesen Plan, dann darf der Start des Tasks nicht nach die erste
1096
	# IST-Buchung geschoben werden.
1097
	$query = "select wd_datum from wdone where ";
1098
	$query .= "wd_task = $ta_num and wd_datum <= $ta_start ";
1099
	$query .= "order by wd_datum";
1100
 
1101
	if (!($reswd = QueryDB($db, $query)))
1102
	   return;
1103
 
1104
	$rows = numrowsDB($reswd);
1105
 
1106
	if ($rows > 0) {
1107
	   $data = fetchDB($reswd, 0);
1108
	   $wd_datum = $data[0];
1109
	}
1110
	# Finden der folgenden Tasks um im Falle eines Ordners automatisch
1111
	# das richtige Beginn- und Endedatum zu setzen.
1112
	$query = "select ta_level, ta_meeting, ta_start,";
1113
	$query .= "ta_start+ta_duration*86400 from task where ";
1114
	$query .= "ta_plnum = $ta_plnum and ta_id > $ta_id order by ta_id";
1115
 
1116
	if (!($result = QueryDB($db, $query))) {
1117
	   closeDB($db);
1118
	   return;
1119
	}
1120
 
1121
	$tstart = 0;
1122
	$tend = 0;
1123
 
1124
	if (($rows = numrowsDB($result)) > 0) {
1125
	   $j = 0;
1126
 
1127
	   while ($j < $rows) {
1128
	      $data = fetchDB($result, $j);
1129
	      $xlevel = $data[0];
1130
	      $xmeeting = $data[1];
1131
	      $xstart = $data[2];
1132
	      $xend = $data[3];
1133
 
1134
	      if ($xlevel <= $ta_level)
1135
	         break;
1136
 
1137
	      if ($tstart == 0 || $tstart > $xstart)
1138
	         $tstart = $xstart;
1139
 
1140
	      if ($tend < $xend) {
1141
	         if ($xmeeting) {
1142
	            if ($tend < $xstart)
1143
		       $tend = $xstart;
1144
		 } else
1145
	            $tend = $xend;
1146
	      }
1147
 
1148
	      $j++;
1149
	   }
1150
	}
1151
?>
1152
<br>
1153
<form name="Task" action="plan.php" method="post">
1154
<input type="hidden" name="ta_num" value="<? echo "$ta_num"; ?>">
1155
<input type="hidden" name="ta_plnum" value="<? echo "$ta_plnum"; ?>">
1156
<input type="hidden" name="headline" value="20">
1157
<input type="hidden" name="menu" value="<? echo "$menu"; ?>">
1158
<input type="hidden" name="ta_id" value="<? echo "$ta_id"; ?>">
1159
<?
1160
	if ($tstart > 0)
1161
	   echo "<input type=\"hidden\" name=\"start\" value=\"". gmdate($dtformatshort, $tstart) . "\">\n";
1162
 
1163
	if ($tend > 0)
1164
	   echo "<input type=\"hidden\" name=\"ende\" value=\"". gmdate($dtformatshort, $tend) . "\">\n";
1165
 
1166
	if ($anz > 0 || $tstart > 0 || $tend > 0)
1167
	   echo "<input type=\"hidden\" name=\"ta_level\" value=\"$ta_level\">\n";
1168
 
1169
	if (!$verrmodul)
1170
	   echo "<input type=\"hidden\" name=\"ta_risiko\" value=\"0\">\n";
1171
?>
1172
<input type="hidden" name="func" value="SaveTask">
1173
 
1174
<table class="input">
1175
   <tr>
1176
      <td>Level:</td>
1177
<?
1178
	if ($anz > 0 || $tstart > 0 || $tend > 0) {
1179
?>
1180
      <td><b><? echo "$ta_level"; ?></b></td>
1181
<?	} else { ?>
1182
      <td><input type="text" class="inputmust" name="ta_level" value="<? echo "$ta_level"; ?>" onBlur="NumRange(this,1,99)" size=2 maxlength=2></td>
1183
<?	} ?>
1184
   </tr>
1185
   <tr>
1186
      <td>Taskname:</td>
1187
      <td><input type="text" class="inputmust" name="ta_name" value="<? echo htmlentities($ta_name); ?>" size=40 maxlength=50></td>
1188
   </tr>
1189
<?
1190
	if (!$pmlight) { ?>
1191
   <tr>
1192
      <td>Farbe:</td>
1193
      <td><input type="text" name="ta_color" value="<? echo "$color"; ?>" size=8 maxlength=6>
1194
<?php
1195
	   echo "<button type=\"button\" onClick=\"javascript:open_window('plan.php?header=1&func=GetColor', 'Farbwahl', 217, 57)\">";
1196
	   echo "<img src=\"image/coloredit.png\" border=0 width=15 height=15 alt=\"Farbwahl\"></button>";
1197
	   echo "</td></tr>\n";
1198
	} else {
1199
	   echo "<input type=\"hidden\" name=\"ta_color\" value=\"ffffcc\">\n";
1200
	}
1201
?>
1202
   <tr>
1203
      <td>Meilenstein:</td>
1204
<?php
1205
	if ($ta_meeting) {
1206
           echo "<td><input type=\"checkbox\" name=\"ta_meeting\" value=\"1\" checked ";
1207
	} else {
1208
           echo "<td><input type=\"checkbox\" name=\"ta_meeting\" value=\"1\" ";
1209
	}
1210
 
1211
	echo "onChange=\"javascript:if (this.checked == true) {document.Task.ende.value = document.Task.start.value;}\" ";
1212
 
1213
	if ($anz > 0  || $tstart > 0 || $tend > 0)
1214
	   echo "disabled";
1215
 
1216
	echo "></td>\n";
1217
?>
1218
   </tr>
1219
<?php
1220
	if ($phase == 1) {
1221
	   echo "<tr><td>Phase:</td>\n<td>";
1222
	   $query = "select kp_num, kp_phase from key_phase order by kp_num";
1223
	   $result = QueryDB($db, $query);
1224
 
1225
	   if (!$result)
1226
	      return;
1227
 
1228
	   $numrows = numrowsDB($result);
1229
	   $row = 0;
1230
	   echo "<select name=\"ta_phase\">\n";
1231
 
1232
	   while ($row < $numrows) {
1233
	      $data = fetchDB($result, $row);
1234
	      $kp_num = $data[0];
1235
	      $kp_phase = $data[1];
1236
 
1237
	      if ($ta_phase == $kp_num)
1238
	         echo "<option value=\"$kp_num\" selected>$kp_num. $kp_phase</option>\n";
1239
	      else
1240
	         echo "<option value=\"$kp_num\">$kp_num. $kp_phase</option>\n";
1241
 
1242
	      $row++;
1243
	   }
1244
 
1245
	   echo "</td></tr>\n";
1246
	}
1247
?>
1248
   <tr>
1249
      <td>Startdatum (<? echo "$VisualDate"; ?>):</td>
1250
<?php
1251
	# Wenn $tstart > 0 ist, dann handelt es sich um einen Ordner!
1252
	if ($tstart > 0)
1253
	   $tm = gmdate($dtformatshort, $tstart);
1254
	else
1255
	   $tm = gmdate($dtformatshort, $ta_start);
1256
 
1257
	echo "      <td><input type=\"text\" class=\"inputmust\" ";
1258
 
1259
	if ($tstart > 0)
1260
	   echo "disabled ";
1261
	else
1262
	   echo "onChange=\"javascript:var stat = CheckDate(this, false);if (stat == true && document.Task.ta_meeting.checked == true) {document.Task.ende.value = this.value;}\" ";
1263
 
1264
	echo "name=\"start\" value=\"$tm\" size=10 maxlength=10>\n";
1265
 
1266
	if ($tend > 0)
1267
	   $te = $tend;
1268
	else
1269
	   $te = $ta_start + ($ta_duration * 86400);
1270
 
1271
	$tem = gmdate($dtformatshort, $te);
1272
 
1273
	if ($tstart == 0) {
1274
?>
1275
          <input type="button" value="..." onClick="javascript:open_window('calendar.php?header=1&edit=<? echo "$ta_start"; ?>&target=window.opener.document.Task.start', 'Calendar', 200, 250); document.Task.start.focus()">
1276
<?
1277
	}
1278
?>
1279
      </td>
1280
   </tr>
1281
   <tr>
1282
      <td>Endedatum (<? echo "$VisualDate"; ?>):</td>
1283
      <td><input type="text" class="inputmust" name="ende" value="<? echo "$tem"; ?>" <? if ($tend > 0) echo "disabled"; ?> onChange="javascript:erg = CheckDate(this, false);if (erg == true) {CheckDateOrder(document.Task.start, this);}" size=10 maxlength=10>
1284
<?
1285
	if ($tend == 0) {
1286
?>
1287
          <input type="button" value="..." onClick="javascript:open_window('calendar.php?header=1&target=window.opener.document.Task.ende', 'Calendar', 200, 250); document.Task.ende.focus()">
1288
<?
1289
	}
1290
?>
1291
      </td>
1292
   </tr>
1293
<?
1294
	if ($verrmodul) {
1295
?>
1296
   <tr>
1297
      <td>Risikoaufschlag:</td>
1298
      <td><input type="text" name="ta_risiko" value="<? echo "$ta_risiko"; ?>" onBlur="javascript:NumRange(this,0,100)" size="3" maxlength=3>%</td>
1299
   </tr>
1300
<?
1301
	}
1302
?>
1303
   <tr>
1304
      <td>Bereits erledigt:</td>
1305
      <td><input type="text" name="ta_complete" value="<? echo "$ta_complete"; ?>" size=3 maxlength=3>%</td>
1306
   </tr>
1307
   <tr>
1308
      <td>Priorit&auml;t:</td>
1309
      <td><select name="ta_priority">
1310
             <option value="0" <? if ($ta_priority == 0) echo "selected"; ?>>Niedrig</option>
1311
	     <option value="1" <? if ($ta_priority == 1) echo "selected"; ?>>Normal</option>
1312
	     <option value="2" <? if ($ta_priority == 2) echo "selected"; ?>>Hoch</option>
1313
	  </select>
1314
      </td>
1315
   </tr>
1316
   <tr>
1317
      <td>Abh&auml;ngigkeit:</td>
1318
      <td colspan=2><select name="ta_depend">
1319
<?php
1320
	if (strlen($ta_depend) == 0 || $ta_depend == 0) {
1321
	   echo "<option selected></option>\n";
1322
	} else {
1323
	   echo "<option></option>\n";
1324
	}
1325
 
1326
	$query = "select ta_num, ta_name, ta_id, ta_level, ta_depend, ta_meeting, ta_phase from task where ta_plnum = $ta_plnum order by ta_id";
1327
	$result = QueryDB($db, $query);
1328
	$numrows = numrowsDB($result);
1329
	$row = 0;
1330
	$snum = "1";
1331
	$olevel = 0;
1332
	$db2 = OpenDB();
1333
 
1334
	while ($row < $numrows) {
1335
	   $data = fetchDB($result, $row);
1336
	   $num = $data[0];
1337
	   $name = $data[1];
1338
	   $id = $data[2];
1339
	   $level = $data[3];
1340
	   $depend = $data[4];
1341
	   $meeting = $data[5];
1342
	   $tphase = $data[6];
1343
 
1344
	   $query = "select ta_level from task where ta_plnum = $ta_plnum and ta_id > $id order by ta_id";
1345
	   $result2 = QueryDB($db2, $query);
1346
	   $nr = numrowsDB($result2);
1347
 
1348
	   if ($nr > 0) {
1349
	      $data = fetchDB($result2, 0);
1350
	      $xlevel = $data[0];
1351
	   } else {
1352
	      $xlevel = $ta_level;
1353
	   }
1354
 
1355
	   if ($olevel == 0) {
1356
	      $lev = 0;
1357
	      $olevel = $level;
1358
	      $dir = -3;
1359
	   } else if ($olevel < $level) {
1360
	      $lev = $level - 1;
1361
	      $olevel = $level;
1362
	      $dir = -3;
1363
	   } else if ($olevel == $level) {
1364
	      $lev = $level - 1;
1365
	      $dir = 0;
1366
	   } else if ($olevel > $level) {
1367
	      $lev = $level - 1;
1368
	      $olevel = $level;
1369
	      $dir = -1;
1370
	   }
1371
 
1372
	   $snum = kNumber($snum, $lev, $dir);
1373
 
1374
	   if ($phase == 1 && $numphase == 1) {
1375
	      $sarr = explode(".", $snum);
1376
	      $sarr[0] = $tphase;
1377
	      $snum = implode(".", $sarr);
1378
	   }
1379
 
1380
	   if ($ta_depend > 0 && $ta_depend == $id) {
1381
	      echo "<option value=\"$id\" selected>$snum $name</option>\n";
1382
	   } else {
1383
	      if (!$meeting && $level > 1 && $xlevel <= $level)
1384
	         echo "<option value=\"$id\">$snum $name</option>\n";
1385
	   }
1386
 
1387
	   $row++;
1388
	}
1389
?>
1390
          </select>
1391
	  <select name="ta_deptype">
1392
	     <option value="2" <? if ($ta_deptype == 2) echo "selected"; ?>>Ende-Beginn</option>
1393
	     <option value="3" <? if ($ta_deptype == 3) echo "selected"; ?>>Ende-Ende</option>
1394
	     <option value="4" <? if ($ta_deptype == 4) echo "selected"; ?>>Beginn-Ende</option>
1395
	     <option value="1" <? if ($ta_deptype == 1) echo "selected"; ?>>Beginn-Beginn</option>
1396
	  </select>
1397
      </td>
1398
   </tr>
1399
   <tr>
1400
      <td valign="top">Kommentar:</td>
1401
      <td colspan=2><textarea name="ta_notiz" rows=5 cols=60><? echo htmlentities($ta_notiz); ?></textarea></td>
1402
   </tr>
1403
   <tr>
1404
      <td class="selnf" colspan=2>
1405
         <table border=0 cellspacing=0 cellpadding=0><tr><td>
1406
<?
1407
	Button("Task Speichern", "Task");
1408
	echo "</td><td>&nbsp;&nbsp;</td><td>";
1409
	ButtonLink("Zur&uuml;ck", "plan.php", "editplan=$ta_plnum&menu=$menu&headline=20");
1410
?>
1411
        </td></tr></table>
1412
      </td>
1413
   </tr>
1414
</table>
1415
<br>
1416
<?php
1417
	echo "</form>\n";
1418
	closeDB($db);
1419
}
1420
 
1421
# Folgende Funktion laesst die Auswahl einer Farbe zu, die dann in ein
1422
# bestimmtes Feld der Maske "Task" geschrieben wird (function AddTask).
1423
# Die Funktion wird ueber ein Java Script innerhalb eines eigenen Fensters
1424
# aufgerufen. Neben einer Farbtafel enthaelt das Fenster noch einen Button
1425
# ueber den es sich schliessen laesst.
1426
#
1427
function GetColor() {
1428
?>
1429
<map name="farbe">
1430
<area shape="rect" coords="1,1,26,10" href="javascript:Farb('255','128','128')">
1431
<area shape="rect" coords="28,1,53,10" href="javascript:Farb('255','255','128')">
1432
<area shape="rect" coords="55,1,80,10" href="javascript:Farb('128','255','128')">
1433
<area shape="rect" coords="82,1,107,10" href="javascript:Farb('0','255','128')">
1434
<area shape="rect" coords="109,1,134,10" href="javascript:Farb('128','255','255')">
1435
<area shape="rect" coords="136,1,161,10" href="javascript:Farb('0','128','255')">
1436
<area shape="rect" coords="163,1,188,10" href="javascript:Farb('255','128','192')">
1437
<area shape="rect" coords="190,1,215,10" href="javascript:Farb('255','128','255')">
1438
<area shape="rect" coords="1,12,26,21" href="javascript:Farb('255','0','0')">
1439
<area shape="rect" coords="28,12,53,21" href="javascript:Farb('255','255','0')">
1440
<area shape="rect" coords="55,12,80,21" href="javascript:Farb('128','255','0')">
1441
<area shape="rect" coords="82,12,107,21" href="javascript:Farb('0','255','64')">
1442
<area shape="rect" coords="109,12,134,21" href="javascript:Farb('0','255','255')">
1443
<area shape="rect" coords="136,12,161,21" href="javascript:Farb('0','128','192')">
1444
<area shape="rect" coords="163,12,188,21" href="javascript:Farb('128','128','192')">
1445
<area shape="rect" coords="190,12,215,21" href="javascript:Farb('255','0','255')">
1446
<area shape="rect" coords="1,23,26,32" href="javascript:Farb('128','64','64')">
1447
<area shape="rect" coords="28,23,53,32" href="javascript:Farb('255','128','64')">
1448
<area shape="rect" coords="55,23,80,32" href="javascript:Farb('0','255','0')">
1449
<area shape="rect" coords="82,23,107,32" href="javascript:Farb('0','128','128')">
1450
<area shape="rect" coords="109,23,134,32" href="javascript:Farb('0','64','128')">
1451
<area shape="rect" coords="136,23,161,32" href="javascript:Farb('128','128','255')">
1452
<area shape="rect" coords="163,23,188,32" href="javascript:Farb('128','0','64')">
1453
<area shape="rect" coords="190,23,215,32" href="javascript:Farb('255','0','128')">
1454
<area shape="rect" coords="1,34,26,43" href="javascript:Farb('128','0','0')">
1455
<area shape="rect" coords="28,34,53,43" href="javascript:Farb('255','128','0')">
1456
<area shape="rect" coords="55,34,80,43" href="javascript:Farb('0','128','0')">
1457
<area shape="rect" coords="82,34,107,43" href="javascript:Farb('0','128','64')">
1458
<area shape="rect" coords="109,34,134,43" href="javascript:Farb('0','0','255')">
1459
<area shape="rect" coords="136,34,161,43" href="javascript:Farb('0','0','160')">
1460
<area shape="rect" coords="163,34,188,43" href="javascript:Farb('128','0','128')">
1461
<area shape="rect" coords="190,34,215,43" href="javascript:Farb('128','0','255')">
1462
<area shape="rect" coords="1,45,26,54" href="javascript:Farb('64','0','0')">
1463
<area shape="rect" coords="28,45,53,54" href="javascript:Farb('128','64','0')">
1464
<area shape="rect" coords="55,45,80,54" href="javascript:Farb('0','64','0')">
1465
<area shape="rect" coords="82,45,107,54" href="javascript:Farb('0','64','64')">
1466
<area shape="rect" coords="109,45,134,54" href="javascript:Farb('0','0','128')">
1467
<area shape="rect" coords="136,45,161,54" href="javascript:Farb('0','0','64')">
1468
<area shape="rect" coords="163,45,188,54" href="javascript:Farb('64','0','64')">
1469
<area shape="rect" coords="190,45,215,54" href="javascript:Farb('64','0','128')">
1470
<area shape="rect" coords="1,56,26,65" href="javascript:Farb('0','0','0')">
1471
<area shape="rect" coords="28,56,53,65" href="javascript:Farb('128','128','0')">
1472
<area shape="rect" coords="55,56,80,65" href="javascript:Farb('128','128','64')">
1473
<area shape="rect" coords="82,56,107,65" href="javascript:Farb('128','128','128')">
1474
<area shape="rect" coords="109,56,134,65" href="javascript:Farb('64','128','128')">
1475
<area shape="rect" coords="136,56,161,65" href="javascript:Farb('192','192','192')">
1476
<area shape="rect" coords="163,56,188,65" href="javascript:Farb('64','64','64')">
1477
<area shape="rect" coords="190,56,215,65" href="javascript:Farb('255','255','255')">
1478
</map>
1479
<img src="image/farben.png" width="217" height="67" border="0" vspace="3" alt="" usemap="#farbe">
1480
<form name="schliessen">
1481
<?
1482
	ButtonProg("Schliessen", "self.close()");
1483
//   <input type="button" name="close" value="Schliessen" onClick="javascript:self.close()">
1484
	echo "</form>\n";
1485
}
1486
 
1487
# Die folgenden zwei Funktionen loeschen einen bestehenden Plan
1488
# und alle damit verknpften Tasks. Neben dem Superuser darf das auch
1489
# vom Projektleiter durchgefuehrt werden.
1490
#
1491
function AskDelete($pl_num) {
1492
	global $phase;
1493
 
1494
	$headline = $_REQUEST['headline'];
1495
	$menu = $_REQUEST['menu'];
1496
	$nav = "pl_num=$pl_num&menu=$menu&func=DeletePlan&headline=21";
1497
?>
1498
<br>
1499
<form action="plan.php" method="post">
1500
<table border=2 class="alarm">
1501
   <tr><td colspan=2><big>Warnung!</big><br><br>
1502
           Sie sind im Begriff alle erfassten Tasks dieses Plans zu
1503
	   l&ouml;schen!<br><br>
1504
	   Wollen Sie wirklich diesen Plan mit allen Daten
1505
	   unwiederbringlich l&ouml;schen?<br>
1506
      </td>
1507
   </tr>
1508
   <tr>
1509
      <td><center><input type="button" name="yes" value="L&ouml;schen" onClick="javascript:MoveTo('plan.php','yes=yes&<? echo "$nav"; ?>')"></center></td>
1510
      <td><center><input type="button" name="no" value="Abbruch" onClick="javascript:MoveTo('plan.php','no=no&<? echo "$nav"; ?>')"></center></td>
1511
   </tr>
1512
</table>
1513
</form>
1514
<?php
1515
}
1516
 
1517
function DeletePlan() {
1518
	global $phase;
1519
 
1520
	$pl_num = $_REQUEST['pl_num'];
1521
	$db = OpenDB();
1522
	QueryDB($db, "begin");
1523
	$query = "select ta_num from task where ta_plnum = $pl_num";
1524
	$result = QueryDB($db, $query);
1525
 
1526
	if (!result) {
1527
	   QueryDB($db, "rollback");
1528
	   closeDB($db);
1529
	   return false;
1530
	}
1531
 
1532
	$numrows = numrowsDB($result);
1533
	$row = 0;
1534
 
1535
	while ($row < $numrows) {
1536
	   $data = fetchDB($result, $row);
1537
	   $ta_num = $data[0];
1538
	   $query = "delete from allocation where al_task = $ta_num";
1539
 
1540
	   if (!QueryDB($db, $query)) {
1541
	      QueryDB($db, "rollback");
1542
	      closeDB($db);
1543
	      return false;
1544
	   }
1545
 
1546
	   $row++;
1547
	}
1548
 
1549
	$query = "delete from task where ta_plnum = $pl_num";
1550
 
1551
	if (!QueryDB($db, $query)) {
1552
	   QueryDB($db, "rollback");
1553
	   closeDB($db);
1554
	   return false;
1555
	}
1556
 
1557
	$query = "delete from plan where pl_num = $pl_num";
1558
 
1559
	if (!QueryDB($db, $query)) {
1560
	   QueryDB($db, "rollback");
1561
	   closeDB($db);
1562
	   return false;
1563
	}
1564
 
1565
	QueryDB($db, "commit");
1566
	Journal(101, "plan.php: DeletePlan: pl_num=$pl_num", $db);
1567
	closeDB($db);
1568
	return true;
1569
}
1570
 
1571
# Die folgenden zwei Funktionen loeschen einen bestehenden Task
1572
# und alle damit verknpften Mitarbeiter. Neben dem Superuser darf das auch
1573
# vom Projektleiter durchgefuehrt werden.
1574
#
1575
function AskDeleteTask($ta_num) {
1576
	global $phase;
1577
 
1578
	$headline = $_REQUEST['headline'];
1579
	$menu = $_REQUEST['menu'];
1580
	$ta_plnum = $_REQUEST['ta_plnum'];
1581
	$nav = "ta_num=$ta_num&ta_plnum=$ta_plnum&func=DeleteTask&menu=$menu&headline=21";
1582
 
1583
	$db = OpenDB();
1584
	$query = "select plan.pl_prnum, project.pr_name from plan, project ";
1585
	$query .= "where plan.pl_num = $ta_plnum and project.pr_num = plan.pl_prnum";
1586
	$result = QueryDB($db, $query);
1587
	$data = fetchDB($result, 0);
1588
	$pl_prnum = $data[0];
1589
	$pr_name = $data[1];
1590
	echo "<p class=\"cry\">Projekt: $pl_prnum $pr_name</p>";
1591
	closeDB($db);
1592
?>
1593
<br>
1594
<form action="plan.php" method="post">
1595
<table border=2 class="alarm">
1596
   <tr><td colspan=2><big>Warnung!</big><br><br>
1597
           Sie sind im Begriff einen Task mit allen seinen Abh&auml;ngigkeiten
1598
	   zu l&ouml;schen!<br><br>
1599
	   Wollen Sie wirklich diesen Task unwiederbringlich l&ouml;schen?<br>
1600
      </td>
1601
   </tr>
1602
   <tr>
1603
      <td><center><input type="button" name="yes" value="L&ouml;schen" onClick="javascript:MoveTo('plan.php','yes=yes&<? echo "$nav"; ?>')"></center></td>
1604
      <td><center><input type="button" name="no" value="Abbruch" onClick="javascript:MoveTo('plan.php','no=no&<? echo "$nav"; ?>')"></center></td>
1605
   </tr>
1606
</table>
1607
</form>
1608
<?php
1609
}
1610
 
1611
function DeleteTask() {
1612
	global $phase;
1613
 
1614
	$ta_num = $_REQUEST['ta_num'];
1615
 
1616
	if (!isset($ta_num) || $ta_num < 1) {
1617
	   Error("Interner Fehler: DeleteTask: Tasknummer fehlt oder ist ung&uuml;ltig!");
1618
	   return false;
1619
	}
1620
 
1621
	$db = OpenDB();
1622
	# Fuer das E-Journal brauchen wir die Plan- und Projektnummer!
1623
	$query = "select pl_num, pl_prnum, ta_name from task, plan where ";
1624
	$query .= "pl_num = ta_plnum and ta_num = $ta_num";
1625
 
1626
	if (!($result = QueryDB($db, $query))) {
1627
	   closeDB($db);
1628
	   return false;
1629
	}
1630
 
1631
	$data = fetchDB($result, 0);
1632
	$pl_num = $data[0];
1633
	$pl_prnum = $data[1];
1634
	$ta_name = $data[2];
1635
 
1636
	QueryDB($db, "begin");
1637
	$query = "delete from allocation where al_task = $ta_num";
1638
	$result = QueryDB($db, $query);
1639
 
1640
	if (!$result) {
1641
	   QueryDB($db, "rollback");
1642
	   Error("SQL-Error: $query");
1643
	   closeDB($db);
1644
	   return false;
1645
	}
1646
 
1647
	$query = "delete from task where ta_num = $ta_num";
1648
 
1649
	if (!QueryDB($db, $query)) {
1650
	   QueryDB($db, "rollback");
1651
	   Error("SQL-Error: $query");
1652
	   closeDB($db);
1653
	   return false;
1654
	}
1655
 
1656
	QueryDB($db, "commit");
1657
	Journal(100, "plan.php: DeleteTask: ta_num=$ta_num $ta_name, pl_num=$pl_num, Projekt: $pl_prnum", $db);
1658
	closeDB($db);
1659
	return true;
1660
}
1661
 
1662
# Die folgenden zwei Funktionen loeschen einen bestehenden Task
1663
# und alle damit verknpften Mitarbeiter. Neben dem Superuser darf das auch
1664
# vom Projektleiter durchgefuehrt werden.
1665
#
1666
function AskDeleteMa() {
1667
	global $phase;
1668
	global $dtformatshort;
1669
 
1670
	$headline = $_REQUEST['headline'];
1671
	$menu = $_REQUEST['menu'];
1672
	$pl_num = $_REQUEST['pl_num'];
1673
	$al_task = $_REQUEST['al_task'];
1674
	$ressource = $_REQUEST['ressource'];
1675
	$nav = "al_task=$al_task&pl_num=$pl_num&ressource=$ressource&func=DeleteMa&menu=$menu&headline=$headline";
1676
 
1677
	$db = OpenDB();
1678
	$query = "select plan.pl_prnum, project.pr_name from plan, project ";
1679
	$query .= "where plan.pl_num = $pl_num and project.pr_num = plan.pl_prnum";
1680
	$result = QueryDB($db, $query);
1681
	$data = fetchDB($result, 0);
1682
	$pl_prnum = $data[0];
1683
	$pr_name = $data[1];
1684
	echo "<p class=\"cry\">Projekt: $pl_prnum $pr_name</p>";
1685
 
1686
	$query = "select ta_name, ta_start, ta_duration from task ";
1687
	$query .= "where ta_num = $al_task";
1688
	$result = QueryDB($db, $query);
1689
	$data = fetchDB($result, 0);
1690
	$ta_name = $data[0];
1691
	$ta_start = $data[1];
1692
	$ta_duration = $data[2];
1693
 
1694
	$query = "select am_hours, am_role, am_nname, am_vname ";
1695
	$query .= "from allocmi where am_task = $al_task and am_ressource = $ressource";
1696
	$result = QueryDB($db, $query);
1697
	$rows = 0;
1698
	$numrows = numrowsDB($result);
1699
 
1700
?>
1701
<br>
1702
<form action="plan.php" method="post">
1703
<table border=2 class="alarm">
1704
   <tr><td colspan=2><big>Warnung!</big><br><br>
1705
           Sie sind im Begriff einen Mitarbeiter von einem Task
1706
	   zu l&ouml;schen!<br>
1707
	   <center><table border=1><tr>
1708
	      <td class="tbhead">Taskname</td>
1709
	      <td class="tbhead">Dauer</td>
1710
	      <td class="tbhead">Start</td></tr>
1711
<?php
1712
        echo "<tr><td>$ta_name</td>\n";
1713
        echo "<td>$ta_duration</td>\n";
1714
        $dt = gmdate($dtformatshort, $ta_start);
1715
        echo "<td>$dt</td></tr>\n";
1716
        echo "</table></center>\n";
1717
 
1718
        echo "<center><p>";
1719
 
1720
        while ($rows < $numrows) {
1721
           $data = fetchDB($result, $rows);
1722
           $am_hours = $data[0];
1723
           $am_role = $data[1];
1724
           $am_nname = $data[2];
1725
           $am_vname = $data[3];
1726
 
1727
           if ($rows == 0) {
1728
              echo "$am_nname $am_vname, $am_role: ";
1729
              printf("%s", FormatNum($am_hours, 3));
1730
           }
1731
           else
1732
              printf(", %s", FormatNum($am_hours, 3));
1733
 
1734
           $rows++;
1735
        }
1736
 
1737
        echo "</p></center>\n";
1738
        closeDB($db);
1739
?>
1740
	   Wollen Sie wirklich diesen Mitarbeiter unwiederbringlich l&ouml;schen?<br>
1741
      </td>
1742
   </tr>
1743
   <tr>
1744
      <td><center><input type="button" name="yes" value="L&ouml;schen" onClick="javascript:MoveTo('plan.php','yes=yes&<? echo "$nav"; ?>')"></center></td>
1745
      <td><center><input type="button" name="no" value="Abbruch" onClick="javascript:MoveTo('plan.php','no=no&<? echo "$nav"; ?>')"></center></td>
1746
   </tr>
1747
</table>
1748
</form>
1749
<?php
1750
}
1751
 
1752
function DeleteMa() {
1753
	$al_task = $_REQUEST['al_task'];
1754
	$ressource = $_REQUEST['ressource'];
1755
 
1756
	$db = OpenDB();
1757
	QueryDB($db, "begin");
1758
	$query = "delete from allocation where al_task = $al_task and ";
1759
	$query .= "al_ressource = $ressource";
1760
	$result = QueryDB($db, $query);
1761
 
1762
	if (!result) {
1763
	   QueryDB($db, "rollback");
1764
	   closeDB($db);
1765
	   return false;
1766
	}
1767
 
1768
	QueryDB($db, "commit");
1769
	Journal(105, "plan.php: DeleteMa: ressource=$ressource; task=$al_task", $db);
1770
	closeDB($db);
1771
	return true;
1772
}
1773
 
1774
# Folgende Funktion wird von SaveTask() aufgerufen.
1775
# Der Aufruf erfolgt, wenn bei einem Task das Startdatum so geaendert
1776
# wurde, dass es gegenueber dem Alten in der Vergangenheit liegt. Ist das
1777
# der Fall, koennen die betroffenen Perioden der zugeordneten Mitarbeiter
1778
# geloescht werden.
1779
#
1780
function AskObsoleteMA() {
1781
	global $menu;
1782
	global $headline;
1783
	global $phase;
1784
 
1785
	$ta_num = $_REQUEST['ta_num'];
1786
	$ta_plnum = $_REQUEST['ta_plnum'];
1787
	$ta_id = $_REQUEST['ta_id'];
1788
	$ta_level = $_REQUEST['ta_level'];
1789
	$ta_name = $_REQUEST['ta_name'];
1790
	$ta_color = $_REQUEST['ta_color'];
1791
	$ta_meeting = $_REQUEST['ta_meeting'];
1792
	$start = $_REQUEST['start'];
1793
	$ende = $_REQUEST['ende'];
1794
	$ta_duration = $_REQUEST['ta_duration'];
1795
	$ta_complete = $_REQUEST['ta_complete'];
1796
	$ta_priority = $_REQUEST['ta_priority'];
1797
	$ta_depend = $_REQUEST['ta_depend'];
1798
	$ta_deptype = $_REQUEST['ta_deptype'];
1799
	$ta_notiz = $_REQUEST['ta_notiz'];
1800
 
1801
	if ($phase)
1802
	   $ta_phase = $_REQUEST['ta_phase'];
1803
	else
1804
	   $ta_phase = 0;
1805
 
1806
	if (!isset($ta_meeting))
1807
	   $ta_meeting = 0;
1808
 
1809
	echo "<form name=\"obsolete\" action=\"plan.php\" method=\"post\">\n";
1810
	echo "<input type=\"hidden\" name=\"ta_num\" value=\"$ta_num\">\n";
1811
	echo "<input type=\"hidden\" name=\"ta_plnum\" value=\"$ta_plnum\">\n";
1812
	echo "<input type=\"hidden\" name=\"ta_id\" value=\"$ta_id\">\n";
1813
	echo "<input type=\"hidden\" name=\"ta_level\" value=\"$ta_level\">\n";
1814
	echo "<input type=\"hidden\" name=\"ta_name\" value=\"$ta_name\">\n";
1815
	echo "<input type=\"hidden\" name=\"ta_color\" value=\"$ta_color\">\n";
1816
	echo "<input type=\"hidden\" name=\"ta_meeting\" value=\"$ta_meeting\">\n";
1817
	echo "<input type=\"hidden\" name=\"ta_duration\" value=\"$ta_duration\">\n";
1818
	echo "<input type=\"hidden\" name=\"ta_complete\" value=\"$ta_complete\">\n";
1819
	echo "<input type=\"hidden\" name=\"ta_priority\" value=\"$ta_priority\">\n";
1820
	echo "<input type=\"hidden\" name=\"ta_depend\" value=\"$ta_depend\">\n";
1821
	echo "<input type=\"hidden\" name=\"ta_deptype\" value=\"$ta_deptype\">\n";
1822
	echo "<input type=\"hidden\" name=\"ta_phase\" value=\"$ta_phase\">\n";
1823
	echo "<input type=\"hidden\" name=\"ta_notiz\" value=\"$ta_notiz\">\n";
1824
	echo "<input type=\"hidden\" name=\"start\" value=\"$start\">\n";
1825
	echo "<input type=\"hidden\" name=\"ende\" value=\"$ende\">\n";
1826
	echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n";
1827
	echo "<input type=\"hidden\" name=\"headline\" value=\"$headline\">\n";
1828
	echo "<input type=\"hidden\" name=\"func\" value=\"SaveObsoleteTask\">\n";
1829
?>
1830
<center>
1831
<table border=2 class="alarm" width="50%">
1832
   <tr>
1833
      <td colspan=2><big>Hinweis!</big><br><br>
1834
         Sie haben das Start&minus; bzw. Endedatum des Tasks
1835
         ge&auml;ndert. Diesem Task sind jedoch bereits Mitarbeiter
1836
         zugeordnet, deren Perioden nun (teilweise) au&szlig;erhalb des
1837
         Zeitraums des Tasks fallen w&uuml;rden.<br><br>
1838
         Wenn Sie folgende Frage mit <b>JA</b> beantworten, werden jene
1839
         Perioden geloescht, die au&szlig;erhalb des Taskzeitraums liegen!<br><br>
1840
         Wollen Sie die Perioden der zugeordneten Mitarbeiter die au&szlig;erhalb des
1841
         Taskzeitraums liegen wirklich loeschen?
1842
      </td>
1843
   </tr>
1844
   <tr>
1845
<?
1846
	echo "<td align=\"center\">";
1847
	Button("Ja", "obsolete");
1848
	echo "</td><td align=\"center\">";
1849
	ButtonLink("Abbrechen", "plan.php", "editplan=$ta_plnum&menu=$menu&headline=$headline");
1850
	echo "</td>";
1851
?>
1852
   </tr>
1853
</table>
1854
</center>
1855
</form>
1856
<?php
1857
}
1858
 
1859
function SaveTask($doit=false) {
1860
	global $phase;
1861
	$ta_num = $_REQUEST['ta_num'];
1862
	$ta_plnum = $_REQUEST['ta_plnum'];
1863
	$ta_id = $_REQUEST['ta_id'];
1864
	$ta_level = $_REQUEST['ta_level'];
1865
	$ta_name = $_REQUEST['ta_name'];
1866
	$ta_color = $_REQUEST['ta_color'];
1867
	$ta_meeting = $_REQUEST['ta_meeting'];
1868
	$start = $_REQUEST['start'];
1869
	$end = $_REQUEST['ende'];
1870
	$ta_duration = $_REQUEST['ta_duration'];
1871
	$ta_complete = $_REQUEST['ta_complete'];
1872
	$ta_priority = $_REQUEST['ta_priority'];
1873
	$ta_depend = $_REQUEST['ta_depend'];
1874
	$ta_deptype = $_REQUEST['ta_deptype'];
1875
	$ta_notiz = $_REQUEST['ta_notiz'];
1876
	$ta_risiko = $_REQUEST['ta_risiko'];
1877
 
1878
	if ($phase)
1879
	   $ta_phase = $_REQUEST['ta_phase'];
1880
	else
1881
	   $ta_phase = 0;
1882
 
1883
	# Plausibilitaetspruefungen
1884
	$err = 0;
1885
 
1886
	if (!isset($ta_plnum) || $ta_plnum < 1) {
1887
	   Error("Interner Fehler: Plannummer fehlt!");
1888
	   $err = 1;
1889
	}
1890
 
1891
	if (!isset($ta_id) || $ta_id < 1) {
1892
	   Error("Interner Fehler: Keine oder ung&uuml;ltige ID-Nummer!");
1893
	   $err = 1;
1894
	}
1895
 
1896
	if (strlen($ta_name) < 1) {
1897
	   Error("Ein Task muss einen Namen haben!");
1898
	   $err = 1;
1899
	}
1900
 
1901
	if (strlen($ta_color) != 6) {
1902
	   Error("Ung&uuml;ltiger Farbcode! Standard (hellgelb) wurde gesetzt!");
1903
	   $ta_color = "ffffcc";
1904
	}
1905
 
1906
	if (!isset($ta_meeting)) {
1907
	   $ta_meeting = 0;
1908
	}
1909
 
1910
	if (!isset($ta_risiko) || $ta_meeting)
1911
	   $ta_risiko = 0;
1912
 
1913
	if (strlen($start) < 8 || str_wordcount($start) != 3) {
1914
	   Error("Ung&uuml;ltiges Startdatum! ($start)");
1915
	   $err = 1;
1916
	}
1917
 
1918
	if (!$ta_meeting && (strlen($end) < 8 || str_wordcount($end) != 3)) {
1919
	   Error("Ung&uuml;ltiges Endedatum! ($end)");
1920
	   $err = 1;
1921
	}
1922
 
1923
	$dt = explode(".", $start);
1924
	$ta_start = gmmktime(0, 0, 0, $dt[1], $dt[0], $dt[2]);
1925
 
1926
	if (!$ta_meeting) {
1927
	   $dt = explode(".", $end);
1928
	   $ta_end = gmmktime(0, 0, 0, $dt[1], $dt[0], $dt[2]);
1929
	} else
1930
	   $ta_end = $ta_start;
1931
 
1932
	if ($ta_meeting == 0 && $ta_start > $ta_end) {
1933
	   Error("Das Startdatum darf nicht gr&ouml;&szlig;er als das Endedatum sein!");
1934
	   $err = 1;
1935
	}
1936
 
1937
	if (!isset($ta_depend) || strlen($ta_depend) == 0) {
1938
	   $ta_depend = 0;
1939
	}
1940
 
1941
	if ($ta_complete > 100) {
1942
	   $ta_complete = 100;
1943
	}
1944
 
1945
	$db = OpenDB();
1946
	# Wenn der vorhergehende Task, sofern einer existiert, ein Meilenstein
1947
	# ist, dann darf der Level des folgenden Tasks nicht hoeher sein.
1948
	$query = "select ta_level, ta_meeting from task where ";
1949
	$query .= "ta_plnum = $ta_plnum and ta_id < $ta_id order by ta_id desc";
1950
 
1951
	if (!($result = QueryDB($db, $query))) {
1952
	   closeDB($db);
1953
	   return false;
1954
	}
1955
 
1956
	if (numrowsDB($result) > 0) {
1957
	   $data = fetchDB($result, 0);
1958
	   $level = $data[0];
1959
	   $meeting = $data[1];
1960
 
1961
	   if ($meeting && !$ta_meeting && $ta_level > $level) {
1962
	      Error("Der \"Level\" ist au&szlig;erhalb des g&uuml;ltigen Bereichs!");
1963
	      $err = 1;
1964
	   }
1965
	}
1966
 
1967
	if ($ta_level < 1 || $ta_level > 99) {
1968
	   Error("Der \"Level\" ist au&szlig;erhalb des g&uuml;ltigen Bereichs!");
1969
	   $err = 1;
1970
	}
1971
 
1972
	if ($err == 1) {
1973
	   closeDB($db);
1974
	   return false;
1975
	}
1976
 
1977
	# Umwandlungen
1978
	$ta_color = hexdec($ta_color);
1979
 
1980
	if (!$ta_meeting)
1981
	   $ta_duration = ($ta_end - $ta_start) / 86400;
1982
	else
1983
	   $ta_duration = 0;
1984
 
1985
	# Aendern wir einen bestehenden Datensatz, oder speichern wir einen
1986
	# neuen?
1987
	if (isset($ta_num) && $ta_num > 0) {		// neuer Datensatz?
1988
	   $query = "select ta_start, ta_duration from task where ta_num = $ta_num";
1989
 
1990
	   if (!($result = QueryDB($db, $query))) {
1991
	      closeDB($db);
1992
	      return false;
1993
	   }
1994
 
1995
	   $numrows = numrowsDB($result);
1996
 
1997
	   # Pruefen ob das eventuell geaenderte Startdatum nicht in einer
1998
	   # zukuenftigen Periode liegt und bereits zugewiesene Mitarbeiter
1999
	   # in der Luft haengen wuerden. Ist das der Fall, muss der User
2000
	   # darauf hingewiesen werden und, wenn er es will, die nicht mehr
2001
	   # zugeordneten Mitarbeiter geloescht werden.
2002
	   #
2003
	   if ($numrows == 1 && !$doit) {
2004
	      $data = fetchDB($result, 0);
2005
	      $old_tastart = $data[0];
2006
	      $old_taduration = $data[1];
2007
	      $oend = $old_tastart + ($old_taduration * 86400);
2008
	      $dend = $ta_start + ($ta_duration * 86400);
2009
 
2010
	      if (PerDateComp($ta_start, $old_tastart) < 0 ||
2011
	          PerDateComp($oend, $dend) < 0) {
2012
		 $query = "select al_num, al_pstart from allocation where ";
2013
		 $query .= "al_task = $ta_num and (al_pstart < $ta_start or ";
2014
		 $query .= "al_pstart > $dend)";
2015
 
2016
		 if (!($result = QueryDB($db, $query))) {
2017
		    closeDB($db);
2018
		    return false;
2019
		 }
2020
 
2021
		 $rows = numrowsDB($result);
2022
 
2023
		 if ($rows > 0) {	// Gibt es MA unterhalb von ta_start?
2024
		    AskObsoleteMA();
2025
		    closeDB($db);
2026
		    require('footer.inc');
2027
		    exit();
2028
		 }
2029
	      }
2030
	   } /* else
2031
	      $numrows = 0;
2032
*/
2033
	   # Gibt es den Datensatz bereits, dann aendern wir ihn.
2034
	   if ($numrows == 1) {
2035
	      if ($doit) {
2036
	         $dend = $ta_start + ($ta_duration * 86400);
2037
	         QueryDB($db, "begin");
2038
	         $query = "delete from allocation where al_task = $ta_num and ";
2039
	         $query .= "(al_pstart < $ta_start or al_pstart > $dend)";
2040
 
2041
	         if (!QueryDB($db, $query)) {
2042
		    closeDB($db);
2043
		    return false;
2044
	         }
2045
	      }
2046
 
2047
	      $query = "update task set ta_name = '$ta_name', ta_color = '$ta_color',";
2048
	      $query .= "ta_meeting = $ta_meeting, ta_start = $ta_start,";
2049
	      $query .= "ta_duration = $ta_duration, ta_complete = $ta_complete,";
2050
	      $query .= "ta_priority = $ta_priority, ta_level = $ta_level,";
2051
	      $query .= "ta_depend = $ta_depend, ta_deptype = $ta_deptype,";
2052
 
2053
	      if ($phase == 1)
2054
	         $query .= "ta_plnum = $ta_plnum, ta_id = $ta_id, ta_phase = $ta_phase,";
2055
	      else
2056
	         $query .= "ta_plnum = $ta_plnum, ta_id = $ta_id,";
2057
 
2058
	      $query .= "ta_notiz = '$ta_notiz', ta_risiko = $ta_risiko where ta_num = $ta_num";
2059
 
2060
	      if (!QueryDB($db, $query)) {
2061
		 if ($doit)
2062
		    QueryDB($db, "rollback");
2063
 
2064
		 closeDB($db);
2065
		 return false;
2066
	      }
2067
 
2068
	      if ($doit)
2069
	         QueryDB($db, "commit");
2070
 
2071
	      closeDB($db);
2072
	      return true;
2073
	   }
2074
	}
2075
 
2076
	# Der Datensatz existiert nicht und deshalb fuegen wir ihn ein. Es
2077
	# muss jedoch geprueft werden, ob die ID bereits existiert. Existiert
2078
	# sie, muessen alle IDs >= #ta_id um 1 erhoeht werden und der
2079
	# Datensatz anschliessend eingefuegt werden.
2080
	$query = "select ta_id from task where ta_plnum = $ta_plnum and ta_id = $ta_id";
2081
	$result = QueryDB($db, $query);
2082
	$numrows = numrowsDB($result);
2083
 
2084
	if ($numrows == 1) {
2085
	   # Alle IDs um 1 nach hinten schieben!
2086
	   $query = "select ta_num, ta_id from task where ta_plnum = $ta_plnum and ta_id >= $ta_id order by ta_id desc";
2087
	   $result = QueryDB($db, $query);
2088
	   $numrows = numrowsDB($result);
2089
	   $row = 0;
2090
	   $db2 = OpenDB();
2091
 
2092
	   while ($row < $numrows) {
2093
	      $data = fetchDB($result, $row);
2094
	      $num = $data[0];
2095
	      $id = $data[1] + 1;
2096
	      $query = "update task set ta_id = $id where ta_num = $num";
2097
 
2098
	      if (!TQueryDB($db2, $query)) {
2099
	         Error("SQL-Error: $query");
2100
		 closeDB($db);
2101
		 closeDB($db2);
2102
		 return false;
2103
	      }
2104
 
2105
	      $row++;
2106
	   }
2107
 
2108
	   closeDB($db2);
2109
	}
2110
 
2111
	# Nun wird der neue Datensatz tatsaechlich geschrieben.
2112
	$query = "select co_task from counter";
2113
	$result = QueryDB($db, $query);
2114
	$data = fetchDB($result, 0);
2115
	$ta_num = $data[0] + 1;
2116
	$ta_hash = md5($ta_num);
2117
 
2118
	QueryDB($db, "begin");
2119
	$query = "insert into task (ta_num, ta_plnum, ta_id, ta_depend,";
2120
	$query .= "ta_deptype, ta_name, ta_color, ta_shape, ta_meeting,";
2121
	$query .= "ta_start, ta_duration, ta_complete, ta_fixed_start,";
2122
	$query .= "ta_priority, ta_level, ta_phase, ta_notiz, ta_hash, ta_risiko) values (";
2123
	$query .= "$ta_num, $ta_plnum, $ta_id, $ta_depend, $ta_deptype,";
2124
	$query .= "'$ta_name', $ta_color, '0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0',";
2125
	$query .= "$ta_meeting, $ta_start, $ta_duration, $ta_complete,";
2126
 
2127
	if ($phase == 1)
2128
	   $query .= "0, $ta_priority, $ta_level, $ta_phase, '$ta_notiz', '$ta_hash', $ta_risiko)";
2129
	else
2130
	   $query .= "0, $ta_priority, $ta_level, 0, '$ta_notiz', '$ta_hash', $ta_risiko)";
2131
 
2132
	if (!QueryDB($db, $query)) {
2133
	   QueryDB($db, "rollback");
2134
	   Error("SQL-Error: $query");
2135
	   closeDB($db);
2136
	   return false;
2137
	}
2138
 
2139
	$query = "update counter set co_task = $ta_num";
2140
 
2141
	if (!QueryDB($db, $query)) {
2142
	   QueryDB($db, "rollback");
2143
	   Error("SQL-Error: $query");
2144
	   closeDB($db);
2145
	   return false;
2146
	}
2147
 
2148
	QueryDB($db, "commit");
2149
	Journal(300, "plan.php: SaveTask: task=$ta_num", $db);
2150
	closeDB($db);
2151
	return true;
2152
}
2153
 
2154
function AddMiAdd() {
2155
	global $periode;
2156
	global $phase;
2157
	global $role;
2158
 
2159
	$al_task = $_REQUEST['al_task'];
2160
	$al_ressource = $_REQUEST['al_ressource'];
2161
	$al_hours = $_REQUEST['al_hours'];
2162
 
2163
	if ($role)
2164
	   $al_role = $_REQUEST['al_role'];
2165
 
2166
	$al_pstart = $_REQUEST['al_pstart'];
2167
 
2168
	if ($phase)
2169
	   $al_phase = $_REQUEST['al_phase'];
2170
	else
2171
	   $al_phase = 0;
2172
 
2173
	$al_hours = str_replace(",", ".", $al_hours);
2174
 
2175
	if ($al_hours <= 0 || $al_hours > 99.999) {
2176
	   Error("Error: Die Projekttage (PT) m&uuml;ssen im Bereich 1 bis 99,999 sein!<br>\n");
2177
	   return false;
2178
	}
2179
 
2180
	$db = OpenDB();
2181
	$query = "select co_allocation from counter";
2182
	$result = QueryDB($db, $query);
2183
 
2184
	if (!$result) {
2185
	   closeDB($db);
2186
	   return false;
2187
	}
2188
 
2189
	$data = fetchDB($result, 0);
2190
	$co_allocation = $data[0] + 1;
2191
	$mon = gmdate("n", $al_pstart);
2192
	$year = gmdate("Y", $al_pstart);
2193
 
2194
	switch ($periode) {
2195
	   case 1: $al_pduration = 364; break;
2196
	   case 2: $al_pduration = 91; break;
2197
	   case 3: $al_pduration = daysinmonth($mon, $year); break;
2198
	   case 4: $al_pduration = 1; break;
2199
	   default: $al_pduration = daysinmonth($mon, $year); break;
2200
	}
2201
 
2202
	QueryDB($db, "begin");
2203
 
2204
	if (!$phase)
2205
	   $al_phase = 0;
2206
 
2207
	$query = "insert into allocation (al_num, al_task, al_ressource,";
2208
 
2209
	if ($role)
2210
	   $query .= "al_hours, al_phase, al_role, al_pstart, al_pduration) ";
2211
	else
2212
	   $query .= "al_hours, al_phase, al_pstart, al_pduration) ";
2213
 
2214
	$query .= "values ($co_allocation, $al_task,";
2215
 
2216
	if ($role)
2217
	   $query .= "$al_ressource, $al_hours, $al_phase, $al_role,";
2218
	else
2219
	   $query .= "$al_ressource, $al_hours, $al_phase, ";
2220
 
2221
	$query .= "$al_pstart, $al_pduration)";
2222
	$result = QueryDB($db, $query);
2223
 
2224
	if (!$result) {
2225
	   QueryDB($db, "rollback");
2226
	   Error("SQL-Error: $query<br>\n");
2227
	   closeDB($db);
2228
	   return false;
2229
	}
2230
 
2231
	$query = "update counter set co_allocation = $co_allocation";
2232
	$result = QueryDB($db, $query);
2233
 
2234
	if (!$result) {
2235
	   QueryDB($db, "rollback");
2236
	   closeDB($db);
2237
	   return false;
2238
	}
2239
 
2240
	QueryDB($db, "commit");
2241
	Journal(202, "plan.php: AddMiAdd: task=$al_task; ressource=$al_ressource", $db);
2242
	closeDB($db);
2243
	return true;
2244
}
2245
 
2246
function AddMiDel($al_num) {
2247
	global $unum;
2248
	global $rstufe;
2249
 
2250
	$db = OpenDB();
2251
	$query = "delete from allocation where al_num = $al_num";
2252
	$result = TQueryDB($db, $query);
2253
 
2254
	if (!$result) {
2255
	   closeDB($db);
2256
	   return false;
2257
	}
2258
 
2259
	Journal(105, "plan.php: AddMiDel: al_num=$al_num", $db);
2260
	closeDB($db);
2261
	return true;
2262
}
2263
 
2264
# Folgende Funktion ermittelt die Summe aller Planwerte eines bestimmten
2265
# Mitarbeiters in einer bestimmten Periode.
2266
#
2267
function GetRessource($db, $mi_num, $periode) {
2268
	$mon = gmdate("n", $periode);
2269
	$year = gmdate("Y", $periode);
2270
	$per_start = gmmktime(0, 0, 0, $mon, 1, $year);
2271
	$per_end = gmmktime(0, 0, 0, $mon, daysinmonth($mon, $year), $year);
2272
	$query = "select sum(al_hours) from allocation, task, plan where ";
2273
	$query .= "ta_num = al_task and pl_num = ta_plnum and pl_status in (2,4) and ";
2274
	$query .= "al_ressource = $mi_num and al_pstart between $per_start and $per_end";
2275
 
2276
	if (!($result = QueryDB($db, $query)))
2277
	   return -1;
2278
 
2279
	$data = fetchDB($result, 0);
2280
	return $data[0];
2281
}
2282
 
2283
function PrintMa($db, $dstart, $dend, $al_task, $color, $pl_num, $ressource, $lock=false) {
2284
	global $periode;
2285
	global $einheit;
2286
	global $menu;
2287
	global $phase;
2288
	global $role;
2289
 
2290
	$nav = "pl_num=$pl_num&al_task=$al_task&menu=$menu&headline=20";
2291
        $query = "select am_num, am_task, am_ressource, am_hours, am_pstart,";
2292
        $query .= "am_pduration, am_role, am_krnum, am_nname, am_vname, am_phase ";
2293
        $query .= "from allocmi where am_task = $al_task order by ";
2294
        $query .= "am_nname, am_vname, am_pstart";
2295
        $erg = QueryDB($db, $query);
2296
 
2297
        if (!$erg)
2298
           return 0;
2299
 
2300
        $erganz = numrowsDB($erg);
2301
        $ergrow = 0;
2302
	$oressource = 0;
2303
	$dt = 0;
2304
	$sum = 0;
2305
	$total = 0;
2306
 
2307
	while ($ergrow < $erganz) {
2308
           $data = fetchDB($erg, $ergrow);
2309
           $am_num = $data[0];
2310
	   $am_task = $data[1];
2311
           $am_ressource = $data[2];
2312
           $am_hours = $data[3];
2313
           $am_pstart = $data[4];
2314
           $am_pduration = $data[5];
2315
           $am_role = $data[6];
2316
           $am_krnum = $data[7];
2317
           $am_nname = $data[8];
2318
           $am_vname = $data[9];
2319
	   $am_phase = $data[10];
2320
 
2321
	   if ($oressource != $am_ressource) {
2322
	      if ($oressource != 0) {
2323
	         $ed = GetEDate($einheit, $ta_start, $ta_duration);
2324
 
2325
		 if ($dt < $ed) {
2326
		    while (PerDateComp($dt, $ed) >= 0) {
2327
	               if ($oressource == $ressource) {
2328
			  $res_hours = GetRessource($db, $ressource, $dt);
2329
			  $pts = GetPT($dt);
2330
	                  $mon = gmdate("n", $dt);
2331
	                  $year = gmdate("Y", $dt);
2332
	                  $nm = "dt_0_" . (string)$mon;
2333
	                  $nm .= "_" . (string)$year;
2334
	                  echo "<td class=\"sel\"><input type=\"text\" name=\"$nm\" size=6 maxlength=6 ";
2335
			  echo "onChange=\"javascript:CheckOverload(this, $res_hours, $pts)\"></td>\n";
2336
	               }
2337
	               else
2338
			  echo "<td style=\"background-color: #$color; border: 1px solid black;\">&nbsp;</td>\n";
2339
 
2340
	               $dt = IncDate($periode, $dt);
2341
	            }
2342
	         }
2343
 
2344
	         while (PerDateComp($dt, $dend) >= 0) {
2345
	            $dt = IncDate($periode, $dt);
2346
	            echo "<td class=\"sel\">&nbsp;</td>";
2347
	         }
2348
 
2349
		 printf ("<td class=\"selnum\"><b>%s</b></td>\n", FormatNum($sum, 3));
2350
		 $total += $sum;
2351
		 $sum = 0;
2352
		 echo "</tr>\n";
2353
	      }
2354
 
2355
	      # Starrer Zeilenbegin ...
2356
	      echo "<tr>\n";
2357
	      # Button
2358
	      echo "<td class=\"selakt\">";
2359
 
2360
	      if (!$lock && $am_ressource == $ressource) {
2361
		 echo "<a name=\"edit\"></a>\n";		# Einsprungpunkt
2362
		 echo "<form name=\"PrintMa\" action=\"plan.php\" method=\"post\">\n";
2363
		 echo "<input type=\"hidden\" name=\"pl_num\" value=\"$pl_num\">\n";
2364
		 echo "<input type=\"hidden\" name=\"ressource\" value=\"$am_ressource\">\n";
2365
		 echo "<input type=\"hidden\" name=\"ta_num\" value=\"$al_task\">\n";
2366
		 echo "<input type=\"hidden\" name=\"al_phase\" value=\"$am_phase\">\n";
2367
		 echo "<input type=\"hidden\" name=\"al_role\" value=\"$am_krnum\">\n";
2368
		 echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n";
2369
		 echo "<input type=\"hidden\" name=\"headline\" value=\"20\">\n";
2370
		 echo "<input type=\"hidden\" name=\"func\" value=\"SaveUpMa\">\n";
2371
/*		 echo "<button type=\"submit\" name=\"submit\">";
2372
		 echo "<img src=\"image/new.png\" border=0 alt=\"Speichern\">";
2373
		 echo "</button>\n";
2374
*/
2375
		 ButtonImage("filesave.png", "PrintMa", "Speichern");
2376
	      } else if (!$lock) {
2377
	         echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php',";
2378
		 echo "'ressource=$am_ressource&func=UpdateMa&$nav#edit')\">";
2379
		 echo "<img src=\"image/edit.png\" border=0 alt=\"Update\"></a>";
2380
	         echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php',";
2381
		 echo "'ta_num=$am_task&ressource=$am_ressource&func=AskDeleteMa&$nav')\">";
2382
		 echo "<img src=\"image/editdelete.png\" border=0 alt=\"Loeschen\"></a>";
2383
	      } else
2384
	         echo "&nbsp;";
2385
 
2386
	      echo "</td>\n";
2387
	      # Nummerierung
2388
              echo "<td class=\"sel\">&nbsp;</td>\n";
2389
	      # Ressource
2390
	      echo "<td colspan=2 class=\"sel\" width=\"20%\"> </td>\n";
2391
	      echo "<td class=\"sel\"><i>$am_nname $am_vname</i></td>\n";
2392
	      # Tasklaenge mit Einheit
2393
	      echo "<td colspan=3 class=\"sel\">&nbsp;</td>\n";
2394
	      # Mitarbeiterrolle
2395
 
2396
	      if ($role)
2397
	         echo "<td class=\"sel\">$am_role</td>\n";
2398
 
2399
	      # Zellen bis zum Taskanfang schreiben
2400
	      $query = "select ta_start, ta_duration from task where ta_num = $am_task";
2401
 
2402
	      if (!($res = QueryDB($db, $query))) {
2403
	         Error("Keinen dazupassenden Task gefunden!");
2404
	         return 0;
2405
	      }
2406
 
2407
	      $data = fetchDB($res, 0);
2408
	      $ta_start = $data[0];
2409
	      $ta_duration = $data[1];
2410
	      $dt = $dstart;
2411
 
2412
	      while (PerDateComp($dt, $ta_start) > 0) {
2413
	         $dt = IncDate($periode, $dt);
2414
	         echo "<td class=\"sel\">&nbsp;</td>";
2415
	      }
2416
 
2417
	      # Falls wir Eingabezeilen benoetigen die vor dem ersten
2418
	      # gespeicherten Task beginnen, schreiben wir diese hier.
2419
	      if ($ressource == $am_ressource && $ta_start < $am_pstart) {
2420
	         while (PerDateComp($dt, $am_pstart) > 0) {
2421
		    $res_hours = GetRessource($db, $ressource, $dt);
2422
		    $pts = GetPT($dt);
2423
	            $mon = gmdate("n", $dt);
2424
	            $year = gmdate("Y", $dt);
2425
	            $nm = "dt_0_" . (string)$mon;
2426
	            $nm .= "_" . (string)$year;
2427
	            echo "<td class=\"sel\"><input type=\"text\" name=\"$nm\" size=6 maxlength=6 ";
2428
		    echo "onChange=\"javascript:CheckOverload(this, $res_hours, $pts)\"></td>\n";
2429
	            $dt = IncDate($periode, $dt);
2430
	         }
2431
	      }
2432
 
2433
	      $oressource = $am_ressource;
2434
	   }
2435
 
2436
	   # Rest der Zeile schreiben
2437
	   $PerStart = GetPeriode($am_pstart);
2438
	   $pyear = gmdate("Y", $am_pstart);
2439
	   $PerAkt = GetPeriode($dt);
2440
	   $tyear = gmdate("Y", $dt);
2441
 
2442
	   if ($ressource == $am_ressource) {
2443
	      $tm = gmdate("j.n.Y", $dt);
2444
	      $ad = explode(".", $tm);
2445
	      $res_hours = GetRessource($db, $ressource, $dt);
2446
	      $pts = GetPT($dt);
2447
 
2448
	      if ($PerStart == $PerAkt) {
2449
	         $nm = "dt_" . (string)$am_num . "_" . (string)$ad[1];
2450
	         $nm .= "_" . (string)$ad[2];
2451
	         printf("<td class=\"sel\"><input type=\"text\" name=\"$nm\" value=\"%s\" size=6 maxlength=6 ", FormatNum($am_hours, 3));
2452
		 echo "onChange=\"javascript:CheckOverload(this, $res_hours, $pts)\"></td>\n";
2453
	         $sum += $am_hours;
2454
	         $ergrow++;
2455
	      } else {
2456
	         $nm = "dt_0_" . (string)$ad[1];
2457
	         $nm .= "_" . (string)$ad[2];
2458
	         echo "<td class=\"sel\"><input type=\"text\" name=\"$nm\" size=6 maxlength=6 ";
2459
		 echo "onChange=\"javascript:CheckOverload(this, $res_hours, $pts)\"></td>\n";
2460
	      }
2461
	   } else {
2462
	      if ($PerStart == $PerAkt && $pyear == $tyear) {
2463
                 printf ("<td style=\"background-color: #$color; border: 1px solid black; text-align:right;\">%s</td>\n", FormatNum($am_hours, 3));
2464
	         $sum += $am_hours;
2465
	         $ergrow++;
2466
	      } else
2467
	         echo "<td style=\"background-color: #$color; border: 1px solid black;\">&nbsp;</td>\n";
2468
	   }
2469
 
2470
	   $dt = IncDate($periode, $dt);
2471
	}
2472
 
2473
	if ($erganz > 0) {
2474
	   $ed = GetEDate($einheit, $ta_start, $ta_duration);
2475
 
2476
	   if ($dt < $ed) {
2477
	      while (PerDateComp($dt, $ed) >= 0) {
2478
	         if ($oressource == $ressource) {
2479
		    $res_hours = GetRessource($db, $am_ressource, $dt);
2480
		    $pts = GetPT($dt);
2481
	            $mon = gmdate("n", $dt);
2482
	            $year = gmdate("Y", $dt);
2483
	            $nm = "dt_0_" . (string)$mon;
2484
	            $nm .= "_" . (string)$year;
2485
	            echo "<td class=\"sel\"><input type=\"text\" name=\"$nm\" size=6 maxlength=6 \n";
2486
		    echo "onChange=\"javascript:CheckOverload(this, $res_hours, $pts)\"></td>\n";
2487
	         }
2488
	         else
2489
		    echo "<td style=\"background-color: #$color; border: 1px solid black;\">&nbsp;</td>\n";
2490
 
2491
	         $dt = IncDate($periode, $dt);
2492
	      }
2493
	   }
2494
 
2495
	   while (PerDateComp($dt, $dend) >= 0) {
2496
	      $dt = IncDate($periode, $dt);
2497
	      echo "<td class=\"sel\">&nbsp;</td>";
2498
	   }
2499
 
2500
	   printf ("<td class=\"selnum\"><b>%s</b></td>\n", FormatNum($sum, 3));
2501
	   $total += $sum;
2502
	   echo "</tr>\n";
2503
 
2504
	   if ($am_ressource == $ressource)
2505
	      echo "</form>\n";
2506
	}
2507
 
2508
	return $total;
2509
}
2510
 
2511
# Liefert den Level des Tasks vor dem angegebenen. Existiert kein Task
2512
# davor, wird -1 zurueckgegeben.
2513
#
2514
function GetPreviousLevel($db, $ta_num) {
2515
	$query = "select ta_id, ta_plnum from task where ta_num = $ta_num";
2516
 
2517
	if (!($result = QueryDB($db, $query)))
2518
	   return -1;
2519
 
2520
	$data = fetchDB($result, 0);
2521
	$ta_id = $data[0];
2522
	$ta_plnum = $data[1];
2523
	$query = "select ta_level from task where ta_plnum = $ta_plnum ";
2524
	$query .= "and ta_num != $ta_num and ta_id < $ta_id ";
2525
	$query .= "order by ta_id desc";
2526
 
2527
	if (!($result = QueryDB($db, $query)))
2528
	   return -1;
2529
 
2530
	if (numrowsDB($result) <= 0)
2531
	   return -1;
2532
 
2533
	$data = fetchDB($result, 0);
2534
	return $data[0];
2535
}
2536
 
2537
# Liefert den Level des Tasks nach dem angegebenen. Existiert kein Task
2538
# danach, wird -1 zurueckgegeben.
2539
#
2540
function GetNextLevel($db, $ta_num) {
2541
	$query = "select ta_id, ta_plnum from task where ta_num = $ta_num";
2542
 
2543
	if (!($result = QueryDB($db, $query)))
2544
	   return -1;
2545
 
2546
	$data = fetchDB($result, 0);
2547
	$ta_id = $data[0];
2548
	$ta_plnum = $data[1];
2549
	$query = "select ta_level from task where ta_plnum = $ta_plnum ";
2550
	$query .= "and ta_num != $ta_num and ta_id > $ta_id ";
2551
	$query .= "order by ta_id";
2552
 
2553
	if (!($result = QueryDB($db, $query)))
2554
	   return -1;
2555
 
2556
	if (numrowsDB($result) <= 0)
2557
	   return -1;
2558
 
2559
	$data = fetchDB($result, 0);
2560
	return $data[0];
2561
}
2562
 
2563
# Folgende Funktion liefert den vorhergehenden, oder den nachfolgenden Task,
2564
# mit welchem getauscht werden kann. Es handelt sich also um einen Task
2565
# des selben Levels.
2566
#
2567
function GetReplaceTask($db, $ta_num, $dir) {
2568
	$query = "select ta_id, ta_plnum, ta_level from task where ta_num = $ta_num";
2569
 
2570
	if (!($result = QueryDB($db, $query)))
2571
	   return -1;
2572
 
2573
	$data = fetchDB($result, 0);
2574
	$ta_id = $data[0];
2575
	$ta_plnum = $data[1];
2576
	$ta_level = $data[2];
2577
	$query = "select ta_num from task where ta_plnum = $ta_plnum ";
2578
	$query .= "and ta_num != $ta_num and ta_level = $ta_level and ta_id ";
2579
 
2580
	if ($dir > 0)		// 0 = Rueckwaerts, 1 = Vorwaerts
2581
	   $query .= "> ";
2582
	else
2583
	   $query .= "< ";
2584
 
2585
	$query .= "$ta_id order by ta_id";
2586
 
2587
	if ($dir == 0)
2588
	   $query .= " desc";
2589
 
2590
	if (!($result = QueryDB($db, $query)))
2591
	   return -1;
2592
 
2593
	if (numrowsDB($result) <= 0)
2594
	   return -1;
2595
 
2596
	$data = fetchDB($result, 0);
2597
	return $data[0];
2598
}
2599
 
2600
# Die Funktion tauscht die Reihen folge eines Tasks, so das ein Task nach
2601
# oben oder unten verschoben werden kann.
2602
#
2603
function MoveTask($ta_num, $dir) {
2604
	$db = OpenDB();
2605
	$query = "select ta_id, ta_plnum, ta_level from task where ta_num = $ta_num";
2606
 
2607
	if (!($result = QueryDB($db, $query))) {
2608
	   closeDB($db);
2609
	   return false;
2610
	}
2611
 
2612
	$data = fetchDB($result, 0);
2613
	$ta_id = $data[0];
2614
	$ta_plnum = $data[1];
2615
	$ta_level = $data[2];
2616
	$query = "select ta_num, ta_id from task where ta_plnum = $ta_plnum and ";
2617
	$query .= "ta_level = $ta_level and ";
2618
 
2619
	if ($dir < 0) {
2620
	   $query .= "ta_num != $ta_num and ta_id < $ta_id ";
2621
	   $query .= "order by ta_id desc";
2622
	} else {
2623
	   $query .= "ta_num != $ta_num and ta_id > $ta_id ";
2624
	   $query .= "order by ta_id";
2625
	}
2626
 
2627
	if (!($result = QueryDB($db, $query))) {
2628
	   closeDB($db);
2629
	   return false;
2630
	}
2631
 
2632
	if (numrowsDB($result) <= 0) {
2633
	   Error("Interner Fehler: In der gew&auml;hlten Richtung existiert kein geeigneter Task!");
2634
	   closeDB($db);
2635
	   return false;
2636
	}
2637
 
2638
	$data = fetchDB($result, 0);
2639
	$ta_num1 = $data[0];
2640
	$ta_id1 = $data[1];
2641
 
2642
	# Tauschen der Tasks
2643
	QueryDB($db, "begin");
2644
	$query = "update task set ta_id = -1 where ta_num = $ta_num";
2645
 
2646
	if (!QueryDB($db, $query)) {
2647
	   QueryDB($db, "rollback");
2648
	   closeDB($db);
2649
	   return false;
2650
	}
2651
 
2652
	$query = "update task set ta_id = $ta_id where ta_num = $ta_num1";
2653
 
2654
	if (!QueryDB($db, $query)) {
2655
	   QueryDB($db, "rollback");
2656
	   closeDB($db);
2657
	   return false;
2658
	}
2659
 
2660
	$query = "update task set ta_id = $ta_id1 where ta_num = $ta_num";
2661
 
2662
	if (!QueryDB($db, $query)) {
2663
	   QueryDB($db, "rollback");
2664
	   closeDB($db);
2665
	   return false;
2666
	}
2667
 
2668
	QueryDB($db, "commit");
2669
	closeDB($db);
2670
	return true;
2671
}
2672
 
2673
# Folgenden Funktionen erlauben die Erfassung von Plaenen, wobei die
2674
# einzelnen Perioden dargestellt werden, welche mit individuellen Zeiten
2675
# gefuellt werden koennen.
2676
# Es wird immer der Zeitraum vom Start des Projekts bis zu seinem Ende
2677
# dargestellt. Bei sehr langen Projekten oder sehr kleinen Perioden, kann
2678
# die Tabelle durchaus sehr breit werden.
2679
#
2680
function PlanPeriode($pl_num, $ta_num, $ressource, $new=false, $lock=false) {
2681
	global $rstufe;
2682
	global $unum;
2683
	global $periode;
2684
	global $verteil;
2685
	global $einheit;
2686
	global $menu;
2687
	global $phase;
2688
	global $dtformatshort;
2689
	global $role;
2690
	global $pmlight;
2691
 
2692
	if ($pl_num <= 0) {
2693
	   Error("Interner Fehler: Es wurde keine Plannummer an \"PlanPeriode\" &uuml;bergeben!");
2694
	   return;
2695
	}
2696
 
2697
	if ($rstufe != 1 && $rstufe != 2) {
2698
	   Error("Berechtigungsfehler!");
2699
	   return;
2700
	}
2701
 
2702
	if (!isset($ta_num))
2703
	   $ta_num = 0;
2704
 
2705
	if (!isset($ressource))
2706
	   $ressource = 0;
2707
	else if ($ressource > 0)
2708
	   $tanum = $ta_num;
2709
 
2710
	if ($lock && $new)
2711
	   $new = false;
2712
 
2713
	$db = OpenDB();
2714
	$query = "select pr_name, pl_prnum, mi_nname, mi_vname from ";
2715
	$query .= "plan, project, mitarbeiter where pl_num = $pl_num and ";
2716
	$query .= "pr_num = pl_prnum and mi_num = pr_pl";
2717
	$result = QueryDB($db, $query);
2718
 
2719
	if (!$result) {
2720
	   closeDB($db);
2721
	   return;
2722
	}
2723
 
2724
	$data = fetchDB($result, 0);
2725
	$pr_name = $data[0];
2726
	$pl_prnum = $data[1];
2727
	$mi_nname = $data[2];
2728
	$mi_vname = $data[3];
2729
 
2730
	# Zeichnen der fixen Kopfspalten.
2731
        if ($new) {
2732
           $id = $_REQUEST['ta_num'];
2733
 
2734
           if (!isset($id))
2735
              $id = 0;
2736
?>
2737
<form name="plan" action="plan.php" method="post">
2738
<input type="hidden" name="menu" value="<? echo "$menu"; ?>">
2739
<input type="hidden" name="headline" value="20">
2740
<input type="hidden" name="pl_num" value="<? echo "$pl_num"; ?>">
2741
<?php
2742
        }
2743
 
2744
	# Eingabezeile fuer den Plankommentar anzeigen.
2745
	$query = "select pl_comment from plan where pl_num = $pl_num";
2746
 
2747
	if (!($result = QueryDB($db, $query))) {
2748
	   closeDB($db);
2749
	   return;
2750
	}
2751
 
2752
	$data = fetchDB($result, 0);
2753
	$pl_comment = $data[0];
2754
 
2755
	if (!$lock && !$new) {
2756
	   echo "<form name=\"plcomment\" aktion=\"plan.php\" method=\"post\">\n";
2757
	   echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n";
2758
	   echo "<input type=\"hidden\" name=\"headline\" value=\"20\">\n";
2759
	   echo "<input type=\"hidden\" name=\"pl_num\" value=\"$pl_num\">\n";
2760
	   echo "<input type=\"hidden\" name=\"func\" value=\"COMMENT\">\n";
2761
	}
2762
 
2763
	echo "<table class=\"input\">\n";
2764
	echo "<tr><td>Projekt:</td><td>$pl_prnum $pr_name</td></tr>\n";
2765
	echo "<tr><td>Projektleiter:</td><td>$mi_nname $mi_vname</td></tr>\n";
2766
	echo "<tr><td>Kommentar:</td>\n";
2767
 
2768
	if (!$lock && !$new) {
2769
	   if ($pmlight)
2770
	      $class = " class=\"inputmust\"";
2771
 
2772
	   echo "<td><input type=\"text\"$class name=\"pl_comment\" ";
2773
	   echo "value=\"" . htmlentities($pl_comment) . "\" onChange=\"javascript:document.plcomment.submit()\" ";
2774
 
2775
	   if ($pmlight)
2776
	      echo "size=\"30\" maxlength=\"30\"></td>\n";
2777
	   else
2778
	      echo "size=\"80\" maxlength=\"255\"></td>\n";
2779
	} else {
2780
	   echo "<td>$pl_comment</td>\n";
2781
	}
2782
 
2783
	echo "</tr></table>\n";
2784
 
2785
	if (!$lock && !$new)
2786
	   echo "</form>\n";
2787
 
2788
	$nav = "pl_num=$pl_num&menu=$menu&headline=20";
2789
?>
2790
<table class="sel">
2791
   <tr>
2792
      <th class="sel" rowspan=2>Akt</th>
2793
      <th class="sel" rowspan=2>Num.</th>
2794
      <th class="sel" colspan=3 rowspan=2>
2795
         <table border=0 width="100%"><tr><td align="center" colspan=2>Taskname</td></tr>
2796
	    <tr><td>&nbsp;</td><td align="right">Ressource</td></tr>
2797
	 </table>
2798
      </th>
2799
      <th class="sel" rowspan=2 colspan=3>
2800
         <table border=0 width="100%"><tr><td align="center" colspan=3>Arbeit</td></tr>
2801
	    <td align="center">Dauer</td>
2802
	    <td align="center">Start</td>
2803
	    <td align="center">Ende</td></tr>
2804
	 </table>
2805
      </th>
2806
<?
2807
	if ($role)
2808
	   echo "      <th class=\"sel\" rowspan=2>Rolle</th>\n";
2809
 
2810
	# Ermitteln des Projektstarts um den Tabellenkopf fertig zu schreiben.
2811
	$query = "select ta_start, ta_duration, ta_meeting from task where ";
2812
	$query .= "ta_plnum = $pl_num order by ta_start";
2813
	$resta = QueryDB($db, $query);
2814
 
2815
	if (!$resta) {
2816
	   closeDB($db);
2817
	   return;
2818
	}
2819
 
2820
	$numrows = numrowsDB($resta);
2821
	$row = 0;
2822
	$fdate = 0;
2823
	$ldate = 0;
2824
 
2825
	while ($row < $numrows) {
2826
	   $data = fetchDB($resta, $row);
2827
	   $ta_start = $data[0];
2828
	   $ta_duration = $data[1];
2829
	   $ta_meeting = $data[2];
2830
 
2831
	   if ($row == 0)
2832
	      $fdate = $ta_start;
2833
 
2834
	   if ($ta_meeting)
2835
	      $ed = $ta_start;
2836
           else
2837
	      $ed = GetEDate($einheit, $ta_start, $ta_duration);
2838
 
2839
	   if ($ed > $ldate)
2840
	      $ldate = $ed;
2841
 
2842
	   $row++;
2843
	}
2844
 
2845
	# Erstellen des restlichen Tabellenkopfs ...
2846
	$tm = gmdate("j.n.Y", $fdate);
2847
	$dt = explode(".", $tm);
2848
	$smon = $dt[1];
2849
	$syear = $dt[2];
2850
	$dt = $fdate;
2851
	$cols = 0;
2852
	$tbcols = 1;
2853
	$oyear = $syear;
2854
 
2855
	while (PerDateComp($dt, $ldate) > 0) {
2856
	   $syear = gmdate("Y", $dt);
2857
 
2858
	   if ($oyear != $syear) {
2859
	      if ($cols <= 1)
2860
	         echo "<th class=\"sel\">$oyear</th>\n";
2861
	      else
2862
	         echo "<th class=\"sel\" colspan=$cols>$oyear</th>\n";
2863
 
2864
	      $oyear = $syear;
2865
	      $cols = 0;
2866
	   }
2867
 
2868
	   $cols++;
2869
	   $tbcols++;
2870
	   $dt = IncDate($periode, $dt);
2871
	}
2872
 
2873
	$cols++;
2874
 
2875
	if ($cols <= 1)
2876
	   echo "<th class=\"sel\">$syear</th>\n";
2877
	else
2878
	   echo "<th class=\"sel\" colspan=$cols>$syear</th>\n";
2879
 
2880
	# Ueberschrift der letzten Spalte, welche die Summierungen der
2881
	# geplanten Aufwaende enthaelt.
2882
	echo "<th class=\"sel\" rowspan=2>Summe<br>Aufwand</th>\n";
2883
	echo "</tr>\n";
2884
	$dt = $fdate;
2885
 
2886
	while (PerDateComp($dt, $ldate) >= 0) {
2887
	   printf ("<th class=\"sel\">%s</th>\n", GetStrMonth($smon));
2888
	   $smon++;
2889
	   $dt = IncDate($periode, $dt);
2890
 
2891
	   if ($smon > 12) {
2892
	      $syear++;
2893
	      $smon = 1;
2894
	   }
2895
	}
2896
 
2897
	echo "</tr>\n";
2898
 
2899
	# Nun muessen wir die Tabelle mit Inhalten fuellen
2900
	$query = "select ta_num, ta_id, ta_name, ta_meeting, ta_start,";
2901
	$query .= "ta_duration, ta_level, ta_phase, ta_color, ta_plnum ";
2902
	$query .= "from task where ta_plnum = $pl_num order by ta_id";
2903
	$result = QueryDB($db, $query);
2904
 
2905
	if (!$result) {
2906
	   closeDB($db);
2907
	   return;
2908
	}
2909
 
2910
	$numrows = numrowsDB($result);
2911
 
2912
	if ($numrows == 0) {
2913
	   $ta_id = 0;
2914
	   $ta_plnum = $pl_num;
2915
	}
2916
 
2917
	$row = 0;
2918
	$snum = "1";
2919
	$ma = false;
2920
        $done = false;
2921
	$total = 0;
2922
 
2923
	while ($row < $numrows) {
2924
	   if (!$ma) {
2925
	      $data = fetchDB($result, $row);
2926
	      $ta_num = $data[0];
2927
	      $ta_id = $data[1];
2928
	      $ta_name = $data[2];
2929
	      $ta_meeting = $data[3];
2930
	      $ta_start = $data[4];
2931
	      $ta_duration = $data[5];
2932
	      $ta_level = $data[6];
2933
	      $ta_phase = $data[7];
2934
	      $ta_color = $data[8];
2935
	      $ta_plnum = $data[9];
2936
 
2937
	      # Der Task muss oben summiert sein, also in der Taskzeile
2938
	      # selbst.
2939
	      if ($ta_level == 1) {
2940
	         $query = "select ta_num, ta_level from task where ";
2941
	         $query .= "ta_plnum = $ta_plnum and ta_id > $ta_id and ";
2942
	         $query .= "ta_meeting = 0 order by ta_id";
2943
 
2944
	         if (!($resta = QueryDB($db, $query))) {
2945
	            closeDB($db);
2946
	            return;
2947
		 }
2948
 
2949
		 $men = numrowsDB($resta);
2950
		 $i = 0;
2951
		 $al_hours = 0;
2952
 
2953
		 while ($i < $men) {
2954
		    $data = fetchDB($resta, $i);
2955
		    $xnum = $data[0];
2956
		    $xlevel = $data[1];
2957
 
2958
		    if ($xlevel <= $ta_level)
2959
		       break;
2960
 
2961
		    $query = "select sum(al_hours) from allocation where ";
2962
		    $query .= "al_task = $xnum";
2963
 
2964
		    if (!($resal = QueryDB($db, $query))) {
2965
		       closeDB($db);
2966
		       return;
2967
		    }
2968
 
2969
		    $data = fetchDB($resal, 0);
2970
		    $al_hours += $data[0];
2971
		    $i++;
2972
		 }
2973
	      } else {
2974
	         $query = "select sum(al_hours) from allocation where ";
2975
	         $query .= "al_task = $ta_num";
2976
 
2977
		 if (!($resal = QueryDB($db, $query))) {
2978
		    closeDB($db);
2979
		    return;
2980
		 }
2981
 
2982
		 $data = fetchDB($resal, 0);
2983
		 $al_hours = $data[0];
2984
	      }
2985
	   }
2986
 
2987
	   # Starrer Zeilenbegin ...
2988
	   echo "<tr>\n";
2989
	   if (!$ma)
2990
	      $snum = GetTaskNum($pl_num, $ta_id, $ta_level, $ta_phase, $ta_meeting, $snum, &$typ, $db);
2991
 
2992
	   # Diverse Aktionen / Buttons
2993
	   echo "<td class=\"selakt\">";
2994
	   $cal_linkf = "";
2995
	   $cal_linkb = "";
2996
 
2997
	   if ($new && $ma) {
2998
	      echo "<a name=\"edit\"></a>\n";		# Einsprungspunkt
2999
	      echo "<input type=\"hidden\" name=\"ta_num\" value=\"$ta_num\">\n";
3000
	      echo "<input type=\"hidden\" name=\"ta_phase\" value=\"$ta_phase\">\n";
3001
	      echo "<input type=\"hidden\" name=\"func\" value=\"SaveMa\">\n";
3002
	      ButtonImage("filesave.png", "plan", "Zeile speichern");
3003
           } else if (!$ta_meeting && !$lock && $ta_level > 1 && $typ) {
3004
	      echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','edittask=$ta_num&$nav')\">";
3005
	      echo "<img src=\"image/edit.png\" border=0 alt=\"Task editieren\"></a>";
3006
	      echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','taskadd=$ta_id&ta_num=$ta_num&ta_plnum=$ta_plnum&$nav')\">";
3007
	      echo "<img src=\"image/new.png\" border=0 alt=\"Einfuegen\"></a>\n";
3008
	      echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','deletetask=$ta_num&ta_plnum=$ta_plnum&$nav')\">";
3009
	      echo "<img src=\"image/editdelete.png\" border=0 alt=\"Task loeschen\"></a>";
3010
	      $lev = GetPreviousLevel($db, $ta_num);
3011
//DEBUG("lev: $lev, ta_level: $ta_level - $ta_name");
3012
	      if ($lev != -1 && $lev >= $ta_level) {
3013
	         echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','moveup=$ta_num&$nav')\">";
3014
	         echo "<img src=\"image/up.png\" border=0 width=\"16\" height=\"16\" alt=\"Hinauf\">";
3015
	      }
3016
 
3017
	      $lev = GetNextLevel($db, $ta_num);
3018
 
3019
	      if ($lev != -1 && $lev >= $ta_level) {
3020
	         echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','movedown=$ta_num&$nav')\">";
3021
	         echo "<img src=\"image/down.png\" border=0 width=\"16\" height=\"16\" alt=\"Hinunter\">";
3022
	      }
3023
 
3024
	      echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','func=AllocMa&ta_num=$ta_num&$nav#edit')\">";
3025
              echo "<img src=\"image/kverbosuser.png\" border=0 width=15 height=15 alt=\"Neuer Mitarbeiter\"></a>";
3026
//	      $cal_linkf = "<a href=\"#\" onClick=\"javascript:open_window('calentry.php?header=1&ca_prnum=$pl_prnum&ca_task=$ta_num&func=plan', 'Kalender', 800, 600)\">";
3027
//              $cal_linkb = "</a>";
3028
	   } else if (!$lock) {
3029
	      echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','edittask=$ta_num&$nav')\">";
3030
	      echo "<img src=\"image/edit.png\" border=0 alt=\"Task editieren\"></a>";
3031
	      echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','taskadd=$ta_id&ta_num=$ta_num&ta_plnum=$ta_plnum&$nav')\">";
3032
	      echo "<img src=\"image/new.png\" border=0 alt=\"Einfuegen\"></a>\n";
3033
	      echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','deletetask=$ta_num&ta_plnum=$ta_plnum&$nav')\">";
3034
	      echo "<img src=\"image/editdelete.png\" border=0 alt=\"Task loeschen\"></a>";
3035
 
3036
//	      if ($ta_meeting) {
3037
		 $lev = GetPreviousLevel($db, $ta_num);
3038
 
3039
		 if ($lev != -1 && $lev >= $ta_level) {
3040
	            echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','moveup=$ta_num&$nav')\">";
3041
	            echo "<img src=\"image/up.png\" border=0 width=\"16\" height=\"16\" alt=\"Hinauf\">";
3042
		 }
3043
 
3044
		 $lev = GetNextLevel($db, $ta_num);
3045
 
3046
		 if ($lev != -1 && $lev >= $ta_level) {
3047
	            echo "<a href=\"#\" onClick=\"javascript:MoveTo('plan.php','movedown=$ta_num&$nav')\">";
3048
	            echo "<img src=\"image/down.png\" border=0 width=\"16\" height=\"16\" alt=\"Hinunter\">";
3049
		 }
3050
//	      }
3051
	   } else
3052
	      echo "&nbsp;";
3053
 
3054
           echo "</td>\n";
3055
	   # Nummerierung
3056
	   if (!$ma) {
3057
	      if ($ta_meeting)
3058
	         echo "<td class=\"sel\"><b>$snum</b></td>\n";
3059
	      else
3060
	         echo "<td class=\"sel\">$snum</td>\n";
3061
           } else {
3062
              echo "<td class=\"sel\">&nbsp;</td>\n";
3063
           }
3064
 
3065
	   # Tasknamendarstellung abhaenging vom Level
3066
	   if (!$ma) {
3067
	      if ($ta_level == 1 || !$typ) {
3068
	         if ($ta_meeting)
3069
	            echo "<td class=\"seldkgray\" colspan=3>" . $cal_linkf . $ta_name . $cal_linkb . "</td>\n";
3070
	         else if ($ta_level == 1)
3071
	            echo "<td class=\"selltgray\" colspan=3>" . $cal_linkf . $ta_name . $cal_linkb . "</td>\n";
3072
		 else
3073
	            echo "<td class=\"selgray\" colspan=3>" . $cal_linkf . $ta_name . $cal_linkb . "</td>\n";
3074
	      } else {
3075
	         if ($ta_meeting)
3076
	            echo "<td class=\"sel\" width=\"10%\"> </td><td class=\"seldkgray\" colspan=2>" . $cal_linkf . $ta_name . $cal_linkb . "</td>\n";
3077
	         else
3078
	            echo "<td class=\"sel\" width=\"10%\"> </td><td class=\"selgray\" colspan=2>" . $cal_linkf . $ta_name . $cal_linkb . "</td>\n";
3079
	      }
3080
           } else if ($ma && $new) {
3081
              echo "<td colspan=2 class=\"sel\" width=\"20%\"> </td>\n";
3082
              echo "<td class=\"sel\"><select name=\"name\">\n";
3083
              $query = "select mi_num, mi_vname, mi_nname from mitarbeiter ";
3084
              $query .= "where mi_plan = true order by mi_nname, mi_vname";
3085
              $resmi = QueryDB($db, $query);
3086
 
3087
              if (!$resmi) {
3088
                 return;
3089
              }
3090
 
3091
              $nr = numrowsDB($resmi);
3092
              $r = 0;
3093
 
3094
              while ($r < $nr) {
3095
                 $data = fetchDB($resmi, $r);
3096
                 $mi_num = $data[0];
3097
                 $mi_vname = $data[1];
3098
                 $mi_nname = $data[2];
3099
                 echo "<option value=\"$mi_num\">$mi_nname $mi_vname</option>\n";
3100
                 $r++;
3101
              }
3102
 
3103
              echo "</select></td>\n";
3104
           }
3105
 
3106
	   if (!$ta_meeting) {
3107
	      if ($typ) {
3108
	         $sein = GetStrEinheit($einheit);
3109
	         echo "<td class=\"selgray\" align=\"right\">$ta_duration $sein</td>\n";
3110
		 $dt = gmdate($dtformatshort, $ta_start);
3111
		 $ed = GetEDate($einheit, $ta_start, $ta_duration);
3112
		 $dte = gmdate($dtformatshort, $ed);
3113
		 echo "<td class=\"selgray\" align=\"center\">$dt</td>\n";
3114
		 echo "<td class=\"selgray\" align=\"center\">$dte</td>\n";
3115
	      } else {
3116
	         if ($ta_level == 1)
3117
	            echo "<td colspan=3 class=\"selltgray\">&nbsp;</td>\n";
3118
		 else
3119
	            echo "<td colspan=3 class=\"selgray\">&nbsp;</td>\n";
3120
	      }
3121
	   } else {
3122
	      echo "<td class=\"seldkgray\" align=\"center\">M</td>\n";
3123
	      $dt = gmdate($dtformatshort, $ta_start);
3124
	      echo "<td class=\"seldkgray\" align=\"center\" colspan=2>$dt</td>\n";
3125
	   }
3126
 
3127
           # Anzeigen der Mitarbeiterrolle
3128
           if ($role) {
3129
              if ($ma && $new) {
3130
                 echo "<td class=\"sel\">";
3131
                 $query = "select kr_num, kr_role from key_role order by kr_num";
3132
                 $result2 = QueryDB($db, $query);
3133
 
3134
                 if (!$result2)
3135
                    return;
3136
 
3137
                 $nr = numrowsDB($result2);
3138
                 $r = 0;
3139
                 echo "<select name=\"role\">\n";
3140
 
3141
                 while ($r < $nr) {
3142
                    $data = fetchDB($result2, $r);
3143
                    $kr_num = $data[0];
3144
                    $kr_role = $data[1];
3145
                    echo "<option value=\"$kr_num\">$kr_role</option>\n";
3146
                    $r++;
3147
                 }
3148
 
3149
                 echo "</select></td>\n";
3150
              } else {
3151
	         if ($ta_level == 1)
3152
	            echo "<td class=\"selltgray\">&nbsp;</td>\n";
3153
	         else
3154
                    echo "<td class=\"selgray\">&nbsp;</td>\n";
3155
              }
3156
	   }
3157
 
3158
	   # Dynamischer Aufbau der restlichen Tabelle.
3159
	   # Ab dem Startdatum werden Eingabezeilen ausgegeben, in die der
3160
	   # Anwender Arbeitseinheiten eintragen kann.
3161
	   $color = dechex($ta_color);
3162
	   $len = strlen($color);
3163
 
3164
	   while ($len < 6) {
3165
	      $color = "0" . $color;
3166
	      $len++;
3167
	   }
3168
 
3169
	   $dt = $fdate;
3170
 
3171
	   while (PerDateComp($dt, $ta_start) > 0) {
3172
	      $dt = IncDate($periode, $dt);
3173
 
3174
	      if (!$typ && ! $ta_meeting && $ta_level == 1)
3175
	         echo "<td class=\"sel\">&nbsp;</td>";
3176
	      else
3177
	         echo "<td class=\"sel\">&nbsp;</td>";
3178
	   }
3179
 
3180
	   if ($ta_meeting)
3181
	      $edate = $ta_start;
3182
	   else
3183
	      $edate = GetEDate($einheit, $ta_start, $ta_duration);
3184
 
3185
	   do {
3186
	      if ($new && $ma) {
3187
	         $tm = gmdate("j.n.Y", $dt);
3188
	         $ad = explode(".", $tm);
3189
	         $nm = "dt_" . (string)$ta_id . "_" . (string)$ad[1];
3190
	         $nm .= "_" . (string)$ad[2];
3191
	         echo "<td class=\"sel\"><input type=\"text\" name=\"$nm\" size=6 maxlength=6></td>\n";
3192
	      } else {
3193
	         if ($typ)
3194
	            echo "<td style=\"background-color: #$color; border: 1px solid black;\">&nbsp;</td>\n";
3195
	         else if ($ta_meeting)
3196
	            echo "<td style=\"color: #$color;background-color: #969696;border: 1px solid black;\"><center>###</center></td>\n";
3197
	         else if ($ta_level == 1)
3198
	            echo "<td style=\"color: #$color;background-color: #dddddd; border: 1px solid black;\"><center>===</center></td>\n";
3199
	         else
3200
	            echo "<td style=\"color: #$color;background-color: #dddddd; border: 1px solid black;\"><center>===</center></td>\n";
3201
	      }
3202
 
3203
	      $dt = IncDate($periode, $dt);
3204
           }
3205
	   while (PerDateComp($dt, $edate) >= 0);
3206
 
3207
	   while (PerDateComp($dt, $ldate) >= 0) {
3208
	      $dt = IncDate($periode, $dt);
3209
 
3210
//	      if ($ta_level == 1)
3211
//	         echo "<td class=\"sel\">&nbsp;</td>";
3212
//	      else
3213
	         echo "<td class=\"sel\">&nbsp;</td>";
3214
	   }
3215
 
3216
	   # Ausfuellen der Summenspalte
3217
//	   if ($sum > 0) {
3218
	   if (($typ && !$ma) || $ta_level == 1) {
3219
	      printf ("<td class=\"selltgray\" align=\"right\"><b><u>%s</u></b></td>\n", FormatNum($al_hours, 3));
3220
	      $sum = 0;
3221
	   } else
3222
	      echo "<td class=\"sel\">&nbsp;</td>\n";
3223
 
3224
	   if ($typ && !$ma) {
3225
	      if ($ta_num == $tanum)
3226
	         $sum = PrintMa($db, $fdate, $ldate, $ta_num, $color, $pl_num, $ressource, $lock);
3227
	      else
3228
	         $sum = PrintMa($db, $fdate, $ldate, $ta_num, $color, $pl_num, 0, $lock);
3229
 
3230
	      $total += $sum;
3231
	   }
3232
 
3233
	   echo "</tr>\n";
3234
 
3235
	   if ($ma) {
3236
              $ma = false;
3237
              $done = true;
3238
           }
3239
 
3240
	   if ($new && !$done && $ta_num == $id)
3241
	      $ma = true;
3242
 
3243
	   if (!$ma)
3244
	      $row++;
3245
	}
3246
 
3247
	# Anfuegen der Summierungen
3248
	if ($total > 0) {
3249
	   if ($role)
3250
	      $span = 9 + $tbcols;
3251
	   else
3252
	      $span = 8 + $tbcols;
3253
 
3254
//	   if ($sum > 0) {
3255
	   if (($typ && !$ma) || $ta_level == 1) {
3256
	      echo "<tr><td class=\"sel\"colspan=$span>&nbsp;</td>";
3257
	      printf("<td class=\"selltgray\" align=\"right\"><b><u>%s</u></b></td></tr>\n", FormatNum($al_hours, 3));
3258
           }
3259
 
3260
	   echo "<tr><td class=\"selnum\" colspan=$span>Gesamtsumme:</td>";
3261
	   printf("<td class=\"selgray\" align=\"right\"><b><u>%s</u></b></td></tr>\n", FormatNum($total, 3));
3262
	}
3263
 
3264
	echo "</table>\n";
3265
 
3266
        if ($new)
3267
           echo "</form>\n";
3268
 
3269
	$ta_id++;
3270
 
3271
	if (!$lock) {
3272
	   echo "<table class=\"indent\"><tr><td>";
3273
	   ButtonLink("Task Anh&auml;ngen", "plan.php", "taskadd=$ta_id&ta_num=$ta_num&ta_plnum=$ta_plnum&$nav");
3274
	   echo "</td></tr></table>";
3275
	}
3276
 
3277
	closeDB($db);
3278
}
3279
 
3280
function AskPlanOverload($db, $res_hours, $plan, $pts, $mon, $year) {
3281
	global $periode;
3282
	global $phase;
3283
	global $role;
3284
	global $dtformatshort;
3285
	global $menu;
3286
	global $headline;
3287
 
3288
	$pl_num = $_REQUEST['pl_num'];
3289
	$ta_num = $_REQUEST['ta_num'];
3290
	$name = $_REQUEST['name'];
3291
	$rolem = $_REQUEST['role'];
3292
 
3293
	if ($phase)
3294
	   $ta_phase = $_REQUEST['ta_phase'];
3295
 
3296
	$query = "select mi_nname, mi_vname from mitarbeiter where ";
3297
	$query .= "mi_num = $name";
3298
 
3299
	if (!($result = QueryDB($db, $query)))
3300
	   return;
3301
 
3302
	$data = fetchDB($result, 0);
3303
	$mi_nname = $data[0];
3304
	$mi_vname = $data[1];
3305
 
3306
	echo "<form name=\"Overload\" action=\"plan.php\" method=\"post\">\n";
3307
	echo "<input type=\"hidden\" name=\"func\" value=\"SaveMa\">\n";
3308
	echo "<input type=\"hidden\" name=\"pl_num\" value=\"$pl_num\">\n";
3309
	echo "<input type=\"hidden\" name=\"ta_num\" value=\"$ta_num\">\n";
3310
	echo "<input type=\"hidden\" name=\"name\" value=\"$name\">\n";
3311
	echo "<input type=\"hidden\" name=\"role\" value=\"$rolem\">\n";
3312
	echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n";
3313
	echo "<input type=\"hidden\" name=\"headline\" value=\"$headline\">\n";
3314
	echo "<input type=\"hidden\" name=\"yes\" value=\"yes\">\n";
3315
 
3316
	if ($phase)
3317
	   echo "<input type=\"hidden\" name=\"ta_phase\" value=\"$ta_phase\">\n";
3318
 
3319
	foreach ($_REQUEST as $key => $pstart) {
3320
	   $fr = substr($key, 0, 3);
3321
 
3322
	   if ($fr == "dt_")
3323
	      echo "<input type=\"hidden\" name=\"$key\" value=\"$pstart\">\n";
3324
	}
3325
 
3326
	$sum = $plan + $res_hours;
3327
?>
3328
<table border=2 class="alarm">
3329
   <tr><td colspan=2><big>Warnung!</big><br><br>
3330
           Die Ressource <font color="white"><? echo "$mi_nname $mi_vname"; ?></font> soll mit weiteren
3331
	   <font color="white"><? echo FormatNum($plan, 3); ?></font> PT's in der Periode
3332
	   <font color="white"><? echo "$mon/$year"; ?></font> gebucht werden. Dadurch
3333
	   w&uuml;rde die Ressource auf insgesamt <font color="white"><? echo FormatNum($sum, 3); ?></font>
3334
	   PT's verplant werden. In dieser Periode stehen jedoch nur
3335
	   <font color="white"><? echo "$pts"; ?></font> PT's zur Verf&uuml;gung!<br>
3336
	   <br>
3337
	   Wollen Sie dennoch die eingegebenen Planwerte f&uuml;r diese
3338
	   Ressource speichern?
3339
      </td>
3340
   </tr>
3341
   <tr>
3342
      <td><center>
3343
<?
3344
	Button("Planwerte speichern", "Overload");
3345
?>
3346
          </center>
3347
      </td>
3348
      <td><center>
3349
<?
3350
	ButtonLink("Abbrechen", "plan.php", "editplan=$pl_num&menu=$menu&headline=$headline");
3351
?>
3352
      </center></td>
3353
   </tr>
3354
</table>
3355
</form>
3356
<?
3357
}
3358
 
3359
function SaveMa($save=true) {
3360
	global $periode;
3361
	global $phase;
3362
	global $role;
3363
 
3364
	$pl_num = $_REQUEST['pl_num'];
3365
	$ta_num = $_REQUEST['ta_num'];
3366
	$name = $_REQUEST['name'];
3367
 
3368
	if ($role)
3369
	   $rolem = $_REQUEST['role'];
3370
 
3371
	if ($phase)
3372
	   $ta_phase = $_REQUEST['ta_phase'];
3373
	else
3374
	   $ta_phase = 0;
3375
 
3376
	$err = 0;
3377
 
3378
	if (!isset($pl_num) || $pl_num <= 0) {
3379
	   Error("Interner Fehler: Plannumer fehlt oder ist ung&uuml;ltig!");
3380
	   $err = 1;
3381
	}
3382
 
3383
	if (!isset($ta_num) || $ta_num <= 0) {
3384
	   Error("Interner Fehler: Tasknummer fehlt oder ist ung&uuml;ltig!");
3385
	   $err = 1;
3386
	}
3387
 
3388
	if (!isset($name) || $name <= 0) {
3389
	   Error("Interner Fehler: Mitarbeiternummer fehlt oder ist ung&uuml;ltig!");
3390
	   $err = 1;
3391
	}
3392
 
3393
	if ($role && (!isset($rolem) || $rolem <= 0)) {
3394
	   Error("Interner Fehler: Rollenbezeichnung fehlt!");
3395
	   $err = 1;
3396
	}
3397
 
3398
	if ($err)
3399
	   return false;
3400
 
3401
//	if (!$role)
3402
//	   $rolem = 1;
3403
 
3404
	$db = OpenDB();
3405
	# Zunaechst muessen wir sicher stellen, das dem Task nicht bereits
3406
	# diese Ressource hinzugefuegt wurde.
3407
	$query = "select al_num from allocation where al_ressource = $name ";
3408
	$query .= "and al_task = $ta_num";
3409
	$result = QueryDB($db, $query);
3410
 
3411
	if (!$result) {
3412
	   closeDB($db);
3413
	   return false;
3414
	}
3415
 
3416
	$anz = numrowsDB($result);
3417
	$query = "select co_allocation from counter";
3418
	$result = QueryDB($db, $query);
3419
 
3420
	if (!$result) {
3421
	   closeDB($db);
3422
	   return false;
3423
	}
3424
 
3425
	$data = fetchDB($result, 0);
3426
	$co_allocation = $data[0];
3427
	QueryDB($db, "begin");
3428
 
3429
	# Falls die Ressource bereits zugeordnet war, wird sie hier geloescht.
3430
	$query = "delete from allocation where al_ressource = $name ";
3431
	$query .= "and al_task = $ta_num";
3432
 
3433
	if (!QueryDB($db, $query)) {
3434
	   QueryDB($db, "rollback");
3435
	   closeDB($db);
3436
	   return false;
3437
	}
3438
 
3439
	foreach ($_REQUEST as $key => $pstart) {
3440
	   $fr = substr($key, 0, 3);
3441
 
3442
	   if ($fr == "dt_") {
3443
	      $p = strpos($key, "_", 3);
3444
	      $ta_id = substr($key, 3, $p-3);
3445
	      $q = strpos($key, "_", $p+1);
3446
	      $mon = substr($key, $p+1, $q-($p+1));
3447
	      $year = substr($key, $q+1);
3448
	      $pstart = str_replace(",", ".", $pstart);
3449
 
3450
	      if (!isset($pstart) || $pstart <= 0.0)
3451
	         continue;
3452
 
3453
	      $al_pstart = gmmktime(0, 0, 0, $mon, 1, $year);
3454
 
3455
	      # Pruefen, ob die Ressource in der aktuellen Periode ueberbucht
3456
	      # ist. Falls ja, erscheint ein rotes Warnfenster, welches den
3457
	      # Anwender darauf hinweist.
3458
	      $res_hours = GetRessource($db, $name, $al_pstart);
3459
	      $pts = GetPT($al_pstart);
3460
 
3461
	      if (!$save && ($res_hours + $pstart) > $pts) {
3462
	         AskPlanOverload($db, $res_hours, $pstart, $pts, $mon, $year);
3463
		 QueryDB($db, "rollback");
3464
		 closeDB($db);
3465
		 include('footer.inc');
3466
		 exit;
3467
	      }
3468
 
3469
	      switch ($periode) {
3470
	         case 1: $al_pduration = 364; break;
3471
	         case 2: $al_pduration = 91; break;
3472
	         case 3: $al_pduration = daysinmonth($mon, $year); break;
3473
	         case 4: $al_pduration = 1; break;
3474
	         default: $al_pduration = daysinmonth($mon, $year); break;
3475
	      }
3476
 
3477
              $co_allocation++;
3478
              $query = "insert into allocation (al_num, al_task, al_ressource,";
3479
              $query .= "al_hours, al_phase, al_pstart, al_pduration";
3480
 
3481
	      if ($role)
3482
	         $query .= ",al_role";
3483
 
3484
              $query .= ") values ($co_allocation, $ta_num, $name, $pstart, ";
3485
              $query .= "$ta_phase, $al_pstart, $al_pduration";
3486
 
3487
	      if ($role)
3488
	         $query .= ", $rolem";
3489
 
3490
	      $query .= ")";
3491
 
3492
              if (!QueryDB($db, $query)) {
3493
                 QueryDB($db, "rollback");
3494
                 closeDB($db);
3495
                 return false;
3496
              }
3497
           }
3498
        }
3499
 
3500
        $query = "update counter set co_allocation = $co_allocation";
3501
 
3502
        if (!QueryDB($db, $query)) {
3503
           QueryDB($db, "rollback");
3504
           closeDB($db);
3505
           return false;
3506
        }
3507
 
3508
        QueryDB($db, "commit");
3509
        Journal(300, "plan.php: SaveMa: task=$ta_num; ressource=$name", $db);
3510
        closeDB($db);
3511
        return true;
3512
}
3513
 
3514
function SaveUpMa() {
3515
        global $periode;
3516
	global $phase;
3517
	global $role;
3518
 
3519
        $pl_num = $_REQUEST['pl_num'];
3520
        $ta_num = $_REQUEST['ta_num'];
3521
	$ressource = $_REQUEST['ressource'];
3522
 
3523
	if ($phase)
3524
	   $al_phase = $_REQUEST['al_phase'];
3525
	else
3526
	   $al_phase = 0;
3527
 
3528
	if ($role)
3529
	   $al_role = $_REQUEST['al_role'];
3530
//	else
3531
//	   $al_role = 1;
3532
 
3533
        $err = 0;
3534
 
3535
        if (!isset($pl_num) || $pl_num <= 0) {
3536
           Error("Interner Fehler: Plannumer fehlt oder ist ung&uuml;ltig!");
3537
           $err = 1;
3538
        }
3539
 
3540
        if (!isset($ta_num) || $ta_num <= 0) {
3541
           Error("Interner Fehler: Tasknummer fehlt oder ist ung&uuml;ltig!");
3542
           $err = 1;
3543
        }
3544
 
3545
        if ($err)
3546
           return false;
3547
 
3548
        $db = OpenDB();
3549
	$query = "select co_allocation from counter";
3550
	$result = QueryDB($db, $query);
3551
 
3552
	if (!$result) {
3553
	   closeDB($db);
3554
	   return false;
3555
	}
3556
 
3557
	$data = fetchDB($result, 0);
3558
	$co_allocation = $data[0];
3559
	$count = $co_allocation;
3560
 
3561
	QueryDB($db, "begin");
3562
 
3563
        foreach ($_REQUEST as $key => $pstart) {
3564
           $fr = substr($key, 0, 3);
3565
 
3566
           if ($fr == "dt_") {
3567
              $p = strpos($key, "_", 3);
3568
              $al_num = substr($key, 3, $p-3);
3569
              $q = strpos($key, "_", $p+1);
3570
              $mon = substr($key, $p+1, $q-($p+1));
3571
              $year = substr($key, $q+1);
3572
	      $pstart = str_replace(",", ".", $pstart);
3573
 
3574
	      if ((!isset($pstart) || $pstart <= 0) && $al_num > 0) {
3575
	         $query = "delete from allocation where al_num = $al_num";
3576
 
3577
		 if (!QueryDB($db, $query)) {
3578
		    QueryDB($db, "rollback");
3579
		    closeDB($db);
3580
		    return false;
3581
		 }
3582
 
3583
	         continue;
3584
	      }
3585
 
3586
	      if ($al_num == 0 && $pstart > 0) {
3587
	         $al_pstart = gmmktime(0, 0, 0, $mon, 1, $year);
3588
 
3589
	         switch ($periode) {
3590
	            case 1: $al_pduration = 364; break;
3591
	            case 2: $al_pduration = 91; break;
3592
	            case 3: $al_pduration = 30; break;
3593
	            case 4: $al_pduration = 1; break;
3594
	            default: $al_pduration = 30; break;
3595
	         }
3596
 
3597
		 $co_allocation++;
3598
	         $query = "insert into allocation (al_num, al_task,";
3599
		 $query .= "al_ressource, al_hours, al_phase, al_pstart,";
3600
 
3601
		 if ($role)
3602
		    $query .= "al_pduration, al_role) values ($co_allocation,";
3603
		 else
3604
		    $query .= "al_pduration) values ($co_allocation,";
3605
 
3606
		 $query .= "$ta_num, $ressource, $pstart, $al_phase,";
3607
 
3608
		 if ($role)
3609
		    $query .= "$al_pstart, $al_pduration, $al_role)";
3610
		 else
3611
		    $query .= "$al_pstart, $al_pduration)";
3612
	      } else if ($al_num > 0 && $pstart > 0) {
3613
		 $query = "update allocation set al_hours = $pstart where ";
3614
		 $query .= "al_num = $al_num";
3615
	      } else
3616
	         continue;
3617
 
3618
	      if (!QueryDB($db, $query)) {
3619
		 QueryDB($db, "rollback");
3620
		 closeDB($db);
3621
		 return false;
3622
	      }
3623
	   }
3624
	}
3625
 
3626
	if ($count < $co_allocation) {
3627
	   $query = "update counter set co_allocation = $co_allocation";
3628
 
3629
	   if (!QueryDB($db, $query)) {
3630
	      QueryDB($db, "rollback");
3631
	      closeDB($db);
3632
	      return false;
3633
	   }
3634
	}
3635
 
3636
	QueryDB($db, "commit");
3637
	Journal(300, "plan.php: SaveUpMa: task=$ta_num; ressource=$ressource", $db);
3638
	closeDB($db);
3639
	return true;
3640
}
3641
 
3642
# Folgende Funktion fragt den Anwender, ob er die IST-Werte auch tatsaechlich
3643
# uebernehmen will.
3644
function AskIstPlan($pl_num) {
3645
	global $phase;
3646
	global $dtformatshort;
3647
 
3648
	$headline = $_REQUEST['headline'];
3649
	$menu = $_REQUEST['menu'];
3650
	$pl_prnum = $_REQUEST['pl_prnum'];
3651
	$pl_status = $_REQUEST['pl_status'];
3652
	$nav = "editcopy=$pl_num&menu=$menu&pl_prnum=$pl_prnum&";
3653
	$nav .= "pl_status=$pl_status&func=CopyPlan&headline=21&";
3654
	$nav .= "istdate='+document.AskIstPlan.istdate.value+'";
3655
	$datum = time();
3656
	$mon = gmdate("n", $datum);
3657
	$year = gmdate("Y", $datum);
3658
	$day = gmdate("j", $datum);
3659
 
3660
	if ($day < (daysinmonth($mon, $year) / 2)) {
3661
	   $mon--;
3662
 
3663
	   if ($mon < 1) {
3664
	      $mon = 12;
3665
	      $year--;
3666
	   }
3667
	}
3668
 
3669
	$datum = gmmktime(0, 0, 0, $mon, 1, $year);
3670
?>
3671
<br>
3672
<form name="AskIstPlan" action="plan.php" method="post">
3673
<table class="input">
3674
   <tr><th class="sel" colspan=3>Plan kopieren</th></tr>
3675
   <tr><td colspan=3><br>Bis zu welcher Periode sollen die IST-Werte als
3676
        Planwerte &uuml;bernommen werden?
3677
        <br><br>
3678
      </td>
3679
   </tr>
3680
   <tr>
3681
      <td>IST-Werte &uuml;bernehmen bis (<? echo GetVisualDate($dtformatshort, true) ?>):</td>
3682
      <td colspan=2><input type="text" name="istdate" value="<? echo GetShortDate($datum) ?>" maxlength=7 size=7></td>
3683
   </tr>
3684
   <tr>
3685
      <td><center><input type="button" name="yes" value="Plan kopieren" onClick="javascript:MoveTo('plan.php','yes=yes&<? echo "$nav"; ?>')"></center></td>
3686
      <td><center><input type="button" name="no" value="Planwerte unver&auml;ndert &uuml;bernehmen" onClick="javascript:MoveTo('plan.php','no=no&<? echo "$nav"; ?>')"></center></td>
3687
      <td><center><input type="button" name="cancel" value="Abbrechen" onClick="javascript:MoveTo('plan.php','cancel=cancel&<? echo "$nav"; ?>')"></center></td>
3688
   </tr>
3689
</table>
3690
</form>
3691
<?php
3692
}
3693
 
3694
# Folgende Funktion kopiert einen bestehenden Plan und erzeugt eine Instanz
3695
# davon. Anschliessend kann diese Instanz bearbeitet werden.
3696
#
3697
function editcopy($pl_num, $plis=false, $doit=false) {
3698
	global $leneinheit;
3699
	global $periode;
3700
	global $role;
3701
	global $pmlight;
3702
 
3703
	$pl_prnum = $_REQUEST['pl_prnum'];
3704
	$pl_status = $_REQUEST['pl_status'];
3705
 
3706
	if (!isset($pl_prnum) || $pl_prnum <= 0) {
3707
	   Error("<br>Interner Fehler: Projektnummer fehlt!<br>");
3708
	   return false;
3709
	}
3710
 
3711
	if (!isset($pl_status) || $pl_status <= 0) {
3712
	   Error("<br>Interner Fehler: Projektstatus wurde nicht &uuml;bergeben!<br>");
3713
	   return false;
3714
	}
3715
 
3716
	if (!$doit) {
3717
	   AskIstPlan($pl_num);
3718
	   require('footer.inc');
3719
	   exit(0);
3720
	}
3721
 
3722
	if ($plis)
3723
	   $istdate = $_REQUEST['istdate'];
3724
	else
3725
	   $istdate = 0;
3726
 
3727
	if (!isset($istdate)) {
3728
	   Error("Es wurde kein Datum angegeben, bis zu welchem die IST-Werte &uuml;bernommen werden sollen");
3729
	   return false;
3730
	} else if ($plis) {
3731
	   $edt = explode(".", $istdate);
3732
	   $istdate = gmmktime(0, 0, 0, $edt[0], 1, $edt[1]);
3733
	}
3734
 
3735
	$db = OpenDB();
3736
	$query = "select pl_lfd, pl_prnum, pl_status, pl_comment from plan where ";
3737
	$query .= "pl_num = $pl_num";
3738
	$result = QueryDB($db, $query);
3739
 
3740
	if (!$result) {
3741
	   closeDB($db);
3742
	   return false;
3743
	}
3744
 
3745
	$data = fetchDB($result, 0);
3746
	$pl_lfd = $data[0];
3747
	$pl_prnum = $data[1];
3748
	$pl_status = $data[2];
3749
	$pl_comment = $data[3];
3750
	closeDB($db);
3751
	unset($db);
3752
 
3753
	$new_pl_num = SaveNewPlan();
3754
 
3755
	if (!$new_pl_num)
3756
	   return false;
3757
 
3758
	$db = OpenDB();
3759
	# Den Kommentar zum neuen Plan hinzufuegen (nur wenn keine strikte
3760
	# Periodensicht ($pmlight == false) gewaehlt wurde)
3761
	if (!$pmlight) {
3762
	   $query = "update plan set pl_comment = '$pl_comment' where ";
3763
	   $query .= "pl_num = $new_pl_num";
3764
 
3765
	   if (!QueryDB($db, $query)) {
3766
	      closeDB($db);
3767
	      return false;
3768
	   }
3769
	}
3770
 
3771
	$query = "select co_task, co_allocation from counter";
3772
	$result = QueryDB($db, $query);
3773
 
3774
	if (!$result) {
3775
	   QueryDB($db, "delete from plan where pl_num = $new_pl_num");
3776
	   closeDB($db);
3777
	   return false;
3778
	}
3779
 
3780
	$data = fetchDB($result, 0);
3781
	$co_task = $data[0] + 1;
3782
	$co_allocation = $data[1] + 1;
3783
 
3784
	# Auselesen der Tasks. In der folgenden Schleife werden die Tasks
3785
	# kopiert und neu eingefuegt.
3786
	$query = "select ta_num, ta_id, ta_depend, ta_deptype, ta_name, ta_color,";
3787
	$query .= "ta_shape, ta_meeting, ta_start, ta_duration, ta_complete,";
3788
	$query .= "ta_fixed_start, ta_priority, ta_level, ta_phase, ta_notiz, ta_risiko, ta_hash ";
3789
	$query .= "from task where ta_plnum = $pl_num order by ta_id";
3790
	$result = QueryDB($db, $query);
3791
 
3792
	if (!$result) {
3793
	   QueryDB($db, "delete from plan where pl_num = $new_pl_num");
3794
	   closeDB($db);
3795
	   return false;
3796
	}
3797
 
3798
	$numrows = numrowsDB($result);
3799
	$rows = 0;
3800
	QueryDB($db, "begin");
3801
 
3802
	while ($rows < $numrows) {
3803
	   $data = fetchDB($result, $rows);
3804
	   $ori_ta_num = $data[0];
3805
	   $ta_id = $data[1];
3806
	   $ta_depend = $data[2];
3807
	   $ta_deptype = $data[3];
3808
	   $ta_name = $data[4];
3809
	   $ta_color = $data[5];
3810
	   $ta_shape = $data[6];
3811
	   $ta_meeting = $data[7];
3812
	   $ta_start = $data[8];
3813
	   $ta_duration = $data[9];
3814
	   $ta_complete = $data[10];
3815
	   $ta_fixed_start = $data[11];
3816
	   $ta_priority = $data[12];
3817
	   $ta_level = $data[13];
3818
	   $ta_phase = $data[14];
3819
	   $ta_notiz = $data[15];
3820
	   $ta_risiko = $data[16];
3821
	   $ta_hash = $data[17];
3822
	   $ta_num = $co_task;
3823
	   $ta_plnum = $new_pl_num;
3824
 
3825
	   if (!isset($ta_fixed_start))
3826
	      $ta_fixed_start = 0;
3827
 
3828
	   if (!isset($ta_risiko))
3829
	      $ta_risiko = 0;
3830
 
3831
	   if (!isset($ta_depend) || strlen($ta_depend) == 0)
3832
	      $ta_depend = "NULL";
3833
 
3834
	   $query = "insert into task (ta_num, ta_plnum, ta_id, ta_depend,";
3835
	   $query .= "ta_deptype, ta_name, ta_color, ta_shape, ta_meeting,";
3836
	   $query .= "ta_start, ta_duration, ta_complete, ta_fixed_start,";
3837
	   $query .= "ta_priority, ta_level, ta_phase, ta_notiz, ta_risiko, ta_hash) values ";
3838
	   $query .= "($ta_num, $ta_plnum, $ta_id, $ta_depend, $ta_deptype,";
3839
	   $query .= "'$ta_name', $ta_color, '$ta_shape', $ta_meeting,";
3840
	   $query .= "$ta_start, $ta_duration, $ta_complete, $ta_fixed_start,";
3841
	   $query .= "$ta_priority, $ta_level, $ta_phase, '$ta_notiz', $ta_risiko, '$ta_hash')";
3842
	   $result2 = QueryDB($db, $query);
3843
 
3844
	   if (!$result2) {
3845
	      QueryDB($db, "rollback");
3846
	      QueryDB($db, "delete from plan where pl_num = $new_pl_num");
3847
	      closeDB($db);
3848
	      return false;
3849
	   }
3850
 
3851
	   if (!$plis) {
3852
	      # Auslesen der Planwerte zum Task.
3853
	      $query = "select al_ressource, al_hours, al_phase, al_pstart,";
3854
 
3855
	      if ($role)
3856
	         $query .= "al_pduration, al_role from allocation where ";
3857
	      else
3858
	         $query .= "al_pduration from allocation where ";
3859
 
3860
	      $query .= "al_task = $ori_ta_num order by al_num";
3861
	      $result3 = QueryDB($db, $query);
3862
 
3863
	      if (!$result3) {
3864
		 QueryDB($db, "rollback");
3865
		 QueryDB($db, "delete from plan where pl_num = $new_pl_num");
3866
		 closeDB($db);
3867
		 return false;
3868
	      }
3869
 
3870
	      $nr = numrowsDB($result3);
3871
	      $r = 0;
3872
 
3873
	      while ($r < $nr) {
3874
	         $data = fetchDB($result3, $r);
3875
	         $al_ressource = $data[0];
3876
	         $al_hours = $data[1];
3877
	         $al_phase = $data[2];
3878
	         $al_pstart = $data[3];
3879
	         $al_pduration = $data[4];
3880
 
3881
		 if ($role)
3882
	            $al_role = $data[5];
3883
 
3884
	         $al_num = $co_allocation;
3885
	         $al_task = $ta_num;
3886
 
3887
	         if (!isset($al_phase))
3888
	            $al_phase = $ta_phase;
3889
 
3890
	         if (!isset($al_pduration))
3891
	            $al_pduration = 1;
3892
 
3893
		 if (!$role)
3894
		    $al_role = 1;
3895
 
3896
	         $query = "insert into allocation (al_num, al_task,";
3897
		 $query .= "al_ressource, al_hours, al_phase, al_pstart,";
3898
 
3899
		 if ($role)
3900
	            $query .= "al_pduration, al_role) values ($al_num, $al_task,";
3901
		 else
3902
	            $query .= "al_pduration) values ($al_num, $al_task,";
3903
 
3904
	         $query .= "$al_ressource, $al_hours, $al_phase, $al_pstart,";
3905
 
3906
		 if ($role)
3907
	            $query .= "$al_pduration, $al_role)";
3908
		 else
3909
	            $query .= "$al_pduration)";
3910
 
3911
	         if (!QueryDB($db, $query)) {
3912
		    QueryDB($db, "rollback");
3913
	            QueryDB($db, "delete from plan where pl_num = $new_pl_num");
3914
	            closeDB($db);
3915
	            return false;
3916
	         }
3917
 
3918
	         $co_allocation++;
3919
	         $r++;
3920
	      }
3921
	   } else {
3922
	      # Periodenweise die IST-Werte ermitteln. Dabei wird von den
3923
	      # Mitarbeitern ausgegangen.
3924
	      $mon = gmdate("n", $ta_start);
3925
	      $year = gmdate("Y", $ta_start);
3926
	      $akt = gmmktime(0, 0, 0, $mon, 1, $year);
3927
	      $end = $ta_start + ($ta_duration * 86400);
3928
	      $mon = gmdate("n", $end);
3929
	      $year = gmdate("Y", $end);
3930
	      $end = gmmktime(0, 0, 0, $mon, daysinmonth($mon, $year), $year);
3931
 
3932
	      while ($akt < $end) {
3933
	         $mon = gmdate("n", $akt);
3934
	         $year = gmdate("Y", $akt);
3935
	         $per_start = gmmktime(0, 0, 0, $mon, 1, $year);
3936
	         $per_end = gmmktime(0, 0, 0, $mon, daysinmonth($mon, $year), $year);
3937
	         $query = "select distinct al_ressource from allocation where ";
3938
		 $query .= "al_task = $ori_ta_num";
3939
 
3940
	         if (!($resma = QueryDB($db, $query))) {
3941
		    QueryDB($db, "rollback");
3942
		    QueryDB($db, "delete from plan where pl_num = $new_pl_num");
3943
		    closeDB($db);
3944
		    return false;
3945
	         }
3946
 
3947
		 $anzma = numrowsDB($resma);
3948
		 $maza = 0;
3949
 
3950
		 while ($maza < $anzma) {
3951
		    $data = fetchDB($resma, $maza);
3952
		    $mi_num = $data[0];
3953
		    # Auslesen der Planwerte der aktuellen Periode pro Mitarbeiter
3954
		    $query = "select al_ressource, al_hours, al_phase, al_pstart,";
3955
	            $query .= "al_pduration, al_role from allocation where ";
3956
	            $query .= "al_task = $ori_ta_num and al_ressource = $mi_num ";
3957
		    $query .= "and al_pstart between $per_start and $per_end";
3958
 
3959
	            if (!($resal = QueryDB($db, $query))) {
3960
		       QueryDB($db, "rollback");
3961
		       QueryDB($db, "delete from plan where pl_num = $new_pl_num");
3962
		       closeDB($db);
3963
		       return false;
3964
	            }
3965
 
3966
		    if (numrowsDB($resal) > 0) {
3967
		       $data = fetchDB($resal, 0);
3968
		       $al_ressource = $data[0];
3969
		       $al_hours = $data[1];
3970
		       $al_phase = $data[2];
3971
		       $al_pstart = $data[3];
3972
		       $al_pduration = $data[4];
3973
		       $al_role = $data[5];
3974
		    } else {
3975
		       $al_ressource = $mi_num;
3976
		       $al_hours = 0.0;
3977
		       $al_phase = $ta_phase;
3978
		       $al_pstart = $akt;
3979
		       $al_pduration = 1;
3980
		    }
3981
 
3982
	            # Auslesen der IST-Werte zum aktuellen Task.
3983
	            if ($akt <= $istdate) {
3984
	               $query = "select sum(wd_hours)/$leneinheit from wdone where ";
3985
	               $query .= "wd_minum = $al_ressource and wd_prnum = $pl_prnum and ";
3986
	               $query .= "wd_datum between $per_start and $per_end and ";
3987
	               $query .= "(wd_task = $ori_ta_num or wd_task in (";
3988
		       $query .= "select ta_num from task where ta_num = $ori_ta_num or ";
3989
		       $query .= "ta_hash = '$ta_hash'))";
3990
 
3991
	               if (!($result2 = QueryDB($db, $query))) {
3992
			  QueryDB($db, "rollback");
3993
			  QueryDB($db, "delete from plan where pl_num = $new_pl_num");
3994
			  return false;
3995
		       }
3996
 
3997
	               if (numrowsDB($result2) > 0) {
3998
			  $data = fetchDB($result2, 0);
3999
			  $wd_hours = $data[0];
4000
			  $al_hours = $wd_hours;
4001
	               } else
4002
		          $al_hours = 0.0;
4003
		    }
4004
 
4005
		    if ($al_hours > 0.0) {
4006
		       $al_num = $co_allocation;
4007
		       $al_task = $ta_num;
4008
	               $query = "insert into allocation (al_num, al_task,";
4009
		       $query .= "al_ressource, al_hours, al_phase, al_pstart,";
4010
 
4011
		       if ($role && isset($al_role))
4012
	                  $query .= "al_pduration, al_role) values ($al_num, $al_task,";
4013
		       else
4014
	                  $query .= "al_pduration) values ($al_num, $al_task,";
4015
 
4016
	               $query .= "$al_ressource, $al_hours, $al_phase, $al_pstart,";
4017
 
4018
		       if ($role && isset($al_role))
4019
	                  $query .= "$al_pduration, $al_role)";
4020
		       else
4021
	                  $query .= "$al_pduration)";
4022
 
4023
	               if (!QueryDB($db, $query)) {
4024
		          QueryDB($db, "rollback");
4025
	                  QueryDB($db, "delete from plan where pl_num = $new_pl_num");
4026
	                  closeDB($db);
4027
	                  return false;
4028
	               }
4029
 
4030
	               $co_allocation++;
4031
		    }
4032
 
4033
		    $maza++;
4034
		 }
4035
 
4036
	         $akt = IncDate($periode, $akt);
4037
	      }
4038
	   }
4039
 
4040
	   $co_task++;
4041
	   $rows++;
4042
	}
4043
 
4044
	$co_task--;
4045
	$co_allocation--;
4046
	$query = "update counter set co_task = $co_task, co_allocation = $co_allocation";
4047
	$result2 = QueryDB($db, $query);
4048
 
4049
	if (!$result2) {
4050
	   QueryDB($db, "rollback");
4051
	   QueryDB($db, "delete from plan where pl_num = $new_pl_num");
4052
	   closeDB($db);
4053
	   return false;
4054
	}
4055
 
4056
	QueryDB($db, "commit");
4057
	Journal(200, "plan.php: editcopy: alte pl_num=$pl_num; neue pl_num=$new_pl_num; projekt=$pl_prnum", $db);
4058
	closeDB($db);
4059
	return true;
4060
}
4061
 
4062
# Folgende Funktion speichert den Kommentar zu einem Plan. Dabei wird der
4063
# TIMESTAMP nicht neu gesetzt!
4064
#
4065
function SavePlanComment() {
4066
	global $pmlight;
4067
 
4068
	$pl_num = $_REQUEST['pl_num'];
4069
	$pl_comment = $_REQUEST['pl_comment'];
4070
 
4071
	if (!isset($pl_num) || $pl_num <= 0) {
4072
	   Error("Interner Fehler: Plannummer fehlt in SavePlanComment!");
4073
	   return;
4074
	}
4075
 
4076
	$db = OpenDB();
4077
	$query = "update plan set pl_comment = '$pl_comment' where ";
4078
	$query .= "pl_num = $pl_num";
4079
 
4080
	if (!QueryDB($db, $query)) {
4081
	   closeDB($db);
4082
	   return;
4083
	}
4084
 
4085
	closeDB($db);
4086
}
4087
 
4088
# Folgende Funktion stellt eine Maske zur Erfassung eines Statusberichts
4089
# dar. Es sind auch Navigationselemente enthalten, um bereits erfasste
4090
# Berichte abrufen zu koennen.
4091
#
4092
function ManageStatus($pr_num, $pl_num, $edit=false, $lock=false) {
4093
	global $pmlight;
4094
	global $statusbericht;
4095
	global $menu;
4096
	global $rstufe;
4097
	global $dtformatshort;
4098
 
4099
	if (!$statusbericht) {
4100
	   Error("Der Statusbericht wurde nicht freigeschalten!");
4101
	   return;
4102
	}
4103
 
4104
	if (!isset($pr_num) || $pr_num <= 0) {
4105
	   Error("Interner Fehler: Projektnummer wurde nicht an ManageStatus &uuml;bergeben!");
4106
	   return;
4107
	}
4108
 
4109
	if (!isset($pl_num) || $pl_num <= 0) {
4110
	   Error("Interner Fehler: Plannummer wurde nicht an ManageStatus &uuml;bergeben!");
4111
	   return;
4112
	}
4113
 
4114
	$env_lock = $_REQUEST['lock'];
4115
 
4116
	if (isset($env_lock) && ($env_lock == true || $env_lock == 1))
4117
	   $lock = true;
4118
 
4119
	if ($edit) {
4120
	   $ps_num = $_REQUEST['ps_num'];
4121
	   $ps_prstat = $_REQUEST['ps_prstat'];
4122
	   $ps_comment = stripslashes(urldecode($_REQUEST['ps_comment']));
4123
	   $ps_status = $_REQUEST['ps_status'];
4124
	   $ps_datum = $_REQUEST['ps_datum'];
4125
	}
4126
 
4127
	$db = OpenDB();
4128
 
4129
	if ($lock && !$edit) {
4130
	   $query = "select ps_num, ps_prstat, ps_comment, ps_status, ";
4131
	   $query .= "to_char(ps_datum, 'DD.MM.YYYY') from planstatus where ";
4132
	   $query .= "ps_prnum = $pr_num and ps_plnum = $pl_num and ";
4133
	   $query .= "ps_status = true order by ps_datum desc";
4134
 
4135
	   if (!($resps = QueryDB($db, $query))) {
4136
	      closeDB($db);
4137
	      return;
4138
	   }
4139
 
4140
	   if (numrowsDB($resps) > 0) {
4141
	      $data = fetchDB($resps, 0);
4142
	      $ps_num = $data[0];
4143
	      $ps_prstat = $data[1];
4144
	      $ps_comment = $data[2];
4145
	      $ps_status = $data[3];
4146
	      $ps_datum = $data[4];
4147
	   }
4148
	}
4149
 
4150
	$query = "select pr_name, pr_pl, mi_nname, mi_vname ";
4151
	$query .= "from project, mitarbeiter where ";
4152
	$query .= "mi_num = pr_pl and pr_num = $pr_num";
4153
 
4154
	if (!($result = QueryDB($db, $query))) {
4155
	   closeDB($db);
4156
	   return;
4157
	}
4158
 
4159
	$data = fetchDB($result, 0);
4160
	$pr_name = $data[0];
4161
	$pr_pl = $data[1];
4162
	$mi_nname = $data[2];
4163
	$mi_vname = $data[3];
4164
 
4165
	if ($pr_pl != $unum && $rstufe != 1) {
4166
	   Error("Nur der Administrator oder der Projektleiter darf den Statusbericht bearbeiten!");
4167
	   closeDB($db);
4168
	   return;
4169
	}
4170
 
4171
	$query = "select pl_status, pl_lfd from plan where pl_num = $pl_num";
4172
 
4173
	if (!($result = QueryDB($db, $query))) {
4174
	   closeDB($db);
4175
	   return;
4176
	}
4177
 
4178
	$data = fetchDB($result, 0);
4179
	$pl_status = $data[0];
4180
	$pl_lfd = $data[1];
4181
 
4182
	switch($pl_status) {
4183
	   case 1: $str_status = "In Erstellung"; break;
4184
	   case 2: $str_status = "Freigegeben"; break;
4185
	   case 3: $str_status = ""; break;
4186
	   case 4: $str_status = "Aktiv"; break;
4187
	   case 5: $str_status = "Inaktiv"; break;
4188
	   case 6: $str_status = "Abgeschlossen"; break;
4189
	}
4190
 
4191
	$nav = "menu=$menu&headline=9";
4192
	# Kopf der Maske malen
4193
?>
4194
<form action="plan.php" name="statb" method="post">
4195
   <input type="hidden" name="menu" value="<? echo "$menu"; ?>">
4196
   <input type="hidden" name="headline" value="9">
4197
   <input type="hidden" name="pr_num" value="<? echo "$pr_num"; ?>">
4198
   <input type="hidden" name="pl_num" value="<? echo "$pl_num"; ?>">
4199
   <input type="hidden" name="ps_pl" value="<? echo "$pr_pl"; ?>">
4200
   <input type="hidden" name="lock" value="<? echo "$lock"; ?>">
4201
<?
4202
	if (isset($ps_num) && $ps_num > 0)
4203
	   echo "<input type=\"hidden\" name=\"ps_num\" value=\"$ps_num\">\n";
4204
 
4205
	if (isset($ps_datum))
4206
	   echo "<input type=\"hidden\" name=\"ps_datum\" value=\"$ps_datum\">\n";
4207
 
4208
	if ($edit && !isset($ps_datum))
4209
	   $ps_datum = date($dtformatshort);
4210
?>
4211
   <input type="hidden" name="func" value="SavePlanstatus">
4212
 
4213
<table class="input">
4214
   <tr>
4215
<?
4216
	if ($edit || $lock) {
4217
?>
4218
      <th class="sel" colspan=2>Statusbericht vom <? echo "$ps_datum"; ?></th>
4219
<?
4220
	} else {
4221
?>
4222
      <th class="sel" colspan=2>Neuen Statusbericht erfassen</th>
4223
<?
4224
	}
4225
?>
4226
      <th class="sel">Alte Berichte</th>
4227
   </tr>
4228
   <tr>
4229
      <td>Projektleiter:</td>
4230
      <td><? echo "$mi_nname $mi_vname"; ?></td>
4231
      <td rowspan=6 valign="top">
4232
<?
4233
	$query = "select ps_num, ps_plnum, ps_status, ps_comment, ps_prstat,";
4234
	$query .= "to_char(ps_datum, 'DD.MM.YYYY') from planstatus ";
4235
	$query .= "where ps_prnum = $pr_num ";
4236
 
4237
	if ($lock)
4238
	   $query .= "and ps_plnum = $pl_num and ps_status = true ";
4239
 
4240
	$query .= "order by ps_lfd desc";
4241
 
4242
	if (!($result = QueryDB($db, $query))) {
4243
	   closeDB($db);
4244
	   return;
4245
	}
4246
 
4247
	$anz = numrowsDB($result);
4248
	$i = 0;
4249
 
4250
	if ($anz > 0)
4251
	   echo "<table class=\"input\">\n";
4252
 
4253
	while ($i < $anz) {
4254
	   $data = fetchDB($result, $i);
4255
	   $xps_num = $data[0];
4256
	   $xps_plnum = $data[1];
4257
	   $xps_status = $data[2];
4258
	   $xps_comment = $data[3];
4259
	   $xps_prstat = $data[4];
4260
	   $xps_datum = $data[5];
4261
 
4262
	   echo "<tr><td><a href=\"#\" onClick=\"javascript:MoveTo('plan.php',";
4263
	   echo "'pr_num=$pr_num&pl_num=$xps_plnum&ps_prstat=$xps_prstat&";
4264
	   echo "ps_num=$xps_num&ps_comment=" . urlencode($xps_comment) . "&ps_status=$xps_status&";
4265
	   echo "ps_datum=$xps_datum&lock=$lock&func=PSEDIT&$nav')\">";
4266
	   echo "$xps_datum</td><td><img src=\"image/";
4267
 
4268
	   switch ($xps_prstat) {
4269
	      case 0: echo "cool.gif\" alt=\"Gruen"; break;
4270
	      case 1: echo "shocked.gif\" alt=\"Gelb"; break;
4271
	      case 2: echo "sad.gif\" alt=\"Rot"; break;
4272
	      default: echo "huh.gif\" alt=\"Undefiniert";
4273
	   }
4274
 
4275
	   echo "\" width=17 height=17></td></tr>\n";
4276
	   $i++;
4277
	}
4278
 
4279
	if ($anz > 0)
4280
	   echo "</table>\n";
4281
?>
4282
      </td>
4283
   </tr>
4284
   <tr>
4285
      <td>Projekt:</td>
4286
      <td><? echo "$pr_num $pr_name"; ?></td>
4287
   </tr>
4288
   <tr>
4289
      <td>Datum:</td>
4290
      <td><? if ($edit || $lock) echo "$ps_datum"; else echo date($dtformatshort); ?></td>
4291
   </tr>
4292
   <tr>
4293
      <td>Plannr./Planstatus:</td>
4294
      <td><? echo "$pl_lfd / $str_status"; ?></td>
4295
   </tr>
4296
   <tr>
4297
      <th class="sel" colspan=2>Statusbericht</th>
4298
   </tr>
4299
   <tr>
4300
      <td>Planstatus:</td>
4301
      <td><select name="ps_prstat" <? if ($lock || $pl_status > 4) echo "disabled"; ?>>
4302
             <option class="status" value="0" <? if ($ps_prstat == 0) echo "selected"; ?>>Gr&uuml;n</option>
4303
             <option class="status" value="1" <? if ($ps_prstat == 1) echo "selected"; ?>>Gelb</option>
4304
             <option class="status" value="2" <? if ($ps_prstat == 2) echo "selected"; ?>>Rot</option>
4305
          </select>
4306
      </td>
4307
   </tr>
4308
   <tr>
4309
      <td valign="top">Statusbeschreibung:</td>
4310
      <td><textarea name="ps_comment" rows=10 cols=60 <? if ($lock || $pl_status > 4) echo "disabled"; ?>><? echo "$ps_comment"; ?></textarea></td>
4311
   </tr>
4312
   <tr>
4313
      <td>Bericht:</td>
4314
      <td><select name="ps_status" <? if ($lock || $pl_status > 4) echo "disabled"; ?>>
4315
             <option value="true" <? if ($ps_status == "t" || $ps_status == "true") echo "selected"; ?>>G&uuml;ltig</option>
4316
             <option value="false" <? if ($ps_status == "f" || $ps_status == "false") echo "selected"; ?>>Ung&uuml;ltig</option>
4317
          </select>
4318
      </td>
4319
   </tr>
4320
</table>
4321
<?
4322
	if ($lock) {
4323
	   echo "</form>\n";
4324
	   closeDB($db);
4325
	   return;
4326
	}
4327
?>
4328
<table class="indent"><tr><td>
4329
<?
4330
	if ($edit) {
4331
	   ButtonLink("Neuer Bericht", "plan.php", "pr_num=$pr_num&pl_num=$pl_num&func=PLANSTATUS&$nav");
4332
	   echo "</td><td>";
4333
	}
4334
 
4335
	if ($pl_status <= 4)
4336
	   ButtonSubmit("Speichern", "statb");
4337
 
4338
	echo "</td></tr></table></form>\n";
4339
	closeDB($db);
4340
}
4341
 
4342
# Folgende Funktion speichert einen zuvor erfassten Planstatus. Dabei wird
4343
# ermittelt ob es den Plan bereits gibt oder nicht.
4344
#
4345
function SavePlanstatus() {
4346
	$ps_num = $_REQUEST['ps_num'];
4347
	$ps_prnum = $_REQUEST['pr_num'];
4348
	$ps_plnum = $_REQUEST['pl_num'];
4349
	$ps_pl = $_REQUEST['ps_pl'];
4350
	$ps_status = $_REQUEST['ps_status'];
4351
	$ps_comment = $_REQUEST['ps_comment'];
4352
	$ps_prstat = $_REQUEST['ps_prstat'];
4353
 
4354
	if (!isset($ps_prnum) || $ps_prnum <= 0) {
4355
	   Error("Interner Fehler: Projektnummer wurde nicht an SavePlanstatus &uuml;bergeben!");
4356
	   return;
4357
	}
4358
 
4359
	if (!isset($ps_plnum) || $ps_plnum <= 0) {
4360
	   Error("Interner Fehler: Plannummer wurde nicht an SavePlanstatus &uuml;bergeben!");
4361
	   return;
4362
	}
4363
 
4364
	if (!isset($ps_pl) || $ps_pl <= 0) {
4365
	   Error("Interner Fehler: Projektleiter wurde nicht an SavePlanstatus &uuml;bergeben!");
4366
	   return;
4367
	}
4368
 
4369
	$db = OpenDB();
4370
	# Gibt es den Satz schon, dann machen wir nur ein Update
4371
	if (isset($ps_num) && $ps_num > 0) {
4372
	   $query = "select count(*) from planstatus where ps_num = $ps_num";
4373
 
4374
	   if (!($result = QueryDB($db, $query))) {
4375
	      closeDB($db);
4376
	      return;
4377
	   }
4378
 
4379
	   $data = fetchDB($result, 0);
4380
 
4381
	   if ($data[0] > 0) {
4382
	      $query = "update planstatus set ps_status = $ps_status, ";
4383
	      $query .= "ps_comment = '$ps_comment', ps_prstat = $ps_prstat ";
4384
	      $query .= "where ps_num = $ps_num";
4385
 
4386
	      if (!QueryDB($db, $query)) {
4387
	         closeDB($db);
4388
	         return;
4389
	      }
4390
 
4391
	      closeDB($db);
4392
	      return;
4393
	   }
4394
	}
4395
 
4396
	# Interne laufende Nummer ermitteln
4397
	$query = "select ps_lfd from planstatus where ps_prnum = $ps_prnum order by ps_lfd desc";
4398
 
4399
	if (!($result = QueryDB($db, $query))) {
4400
	   closeDB($db);
4401
	   return;
4402
	}
4403
 
4404
	if (numrowsDB($result) > 0) {
4405
	   $data = fetchDB($result, 0);
4406
	   $ps_lfd = $data[0] + 1;
4407
	} else
4408
	   $ps_lfd = 0;
4409
 
4410
	# Internen Zaehler ermitteln
4411
	$query = "select co_planstatus from counter";
4412
 
4413
	if (!($result = QueryDB($db, $query))) {
4414
	   closeDB($db);
4415
	   return;
4416
	}
4417
 
4418
	$data = fetchDB($result, 0);
4419
	$co_planstatus = $data[0] + 1;
4420
	# Einfuegen der Daten in die Datenbank
4421
	if (!QueryDB($db, "begin")) {
4422
	   closeDB($db);
4423
	   return;
4424
	}
4425
 
4426
	$query = "insert into planstatus (ps_num, ps_pl, ps_prnum, ps_plnum,";
4427
	$query .= "ps_status, ps_comment, ps_lfd, ps_prstat, ps_datum) ";
4428
	$query .= "values ($co_planstatus, $ps_pl, $ps_prnum, $ps_plnum, ";
4429
	$query .= "$ps_status, '$ps_comment', $ps_lfd, $ps_prstat, ";
4430
	$query .= "current_timestamp)";
4431
 
4432
	if (!QueryDB($db, $query)) {
4433
	   QueryDB($db, "rollback");
4434
	   closeDB($db);
4435
	   return;
4436
	}
4437
 
4438
	$query = "update counter set co_planstatus = $co_planstatus";
4439
 
4440
	if (!QueryDB($db, $query)) {
4441
	   QueryDB($db, "rollback");
4442
	   closeDB($db);
4443
	   return;
4444
	}
4445
 
4446
	QueryDB($db, "commit");
4447
	closeDB($db);
4448
}
4449
 
4450
require_once('planlockm.inc');
4451
 
4452
# Folgende Abfrage stellt eine Maske zur Verfuegung, mit deren Hilfe
4453
# die Stammdaten eines neuen Plans erfasst werden koennen. Es ist der Erste
4454
# von insgesamt 3 Schritten.
4455
# Im zweiten Schritt wird zwischen Grob und Feinplanung entschieden. Bei der
4456
# Grobplanung werden noch keine direkten Ressourcen vergeben, wohl aber die
4457
# Anzahl der PT und die Zeitdauer der Tasks angegeben.
4458
# Nei der Feinplanung werden dann den Tasks Ressourcen zugeordnet. Diese
4459
# Planung kann schlisslich in Form eines Ganttcharts ausgegeben werden.
4460
# Bei der sp�eren IST-Erfassung werden die eingegebenen Zeiten mit den
4461
# geplanten gegengerechnet und Abweichungen dargestellt.
4462
#
4463
if ($knopf == 10) {
4464
   echo "<form name=\"temp\" action=\"plan.php\" method=\"post\">\n";
4465
   echo "<input type=\"hidden\" name=\"pl_status\" value=\"1\">\n";
4466
   echo "<input type=\"hidden\" name=\"headline\" value=\"19\">\n";
4467
   echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n";
4468
   echo "<input type=\"hidden\" name=\"func\" value=\"SaveNewPlan\">\n";
4469
 
4470
   echo "<table class=\"input\">\n";
4471
   echo "<tr><td>Projekt:</td><td><select name=\"pl_prnum\">\n";
4472
 
4473
   $db = OpenDB();
4474
 
4475
   if ($rstufe == 1) {
4476
      $query = "select pr_num, pr_name from project where pr_status = 0 ";
4477
      $query .= "order by pr_num";
4478
   } else {
4479
      $query = "select pr_num, pr_name from project where ";
4480
      $query .= "pr_pl = $unum and pr_status = 0 ";
4481
      $query .= "order by pr_num";
4482
   }
4483
 
4484
   $result = QueryDB($db, $query);
4485
   $numrows = numrowsDB($result);
4486
   $row = 0;
4487
 
4488
   while ($row < $numrows) {
4489
      $data = fetchDB($result, $row);
4490
      $pr_num = $data[0];
4491
      $pr_name = $data[1];
4492
 
4493
      $query = "select count(*) from plan where pl_prnum = $pr_num and ";
4494
      $query .= "pl_status = 6";
4495
 
4496
      if (!($respl = QueryDB($db, $query)))
4497
	 break;
4498
 
4499
      $data = fetchDB($respl, 0);
4500
 
4501
      if ($data[0] > 0) {
4502
	 $row++;
4503
	 continue;
4504
      }
4505
 
4506
      echo "<option value=\"$pr_num\">$pr_num $pr_name</option>\n";
4507
      $row++;
4508
   }
4509
 
4510
   echo "</select></td></tr>\n";
4511
   echo "<tr><td>Template:</td>\n";
4512
   echo "<td><select name=\"te_num\">\n<option value=\"0\"> -- kein Template -- </option>\n";
4513
 
4514
   $query = "select te_num, te_name from tempidx order by te_name";
4515
   $result = QueryDB($db, $query);
4516
   $numrows = numrowsDB($result);
4517
   $row = 0;
4518
 
4519
   while ($row < $numrows) {
4520
      $data = fetchDB($result, $row);
4521
      $te_num = $data[0];
4522
      $te_name = $data[1];
4523
      echo "<option value=\"$te_num\">$te_name</option>\n";
4524
      $row++;
4525
   }
4526
 
4527
   echo "</td></tr>\n";
4528
   echo "</table>\n";
4529
   echo "<table class=\"indent\"><tr><td>";
4530
   ButtonSubmit("Plan erstellen", "temp");
4531
   echo "</td></tr></table>";
4532
   echo "</form>\n";
4533
}
4534
 
4535
if ($knopf == 2) {
4536
   ShowPlan($rstufe, $menu, $unum);
4537
//   include('start.inc');
4538
}
4539
 
4540
if ($knopf == 11) {
4541
   ShowPlan($rstufe, $menu, $unum);
4542
}
4543
 
4544
if (isset($func)) {
4545
   if ($func == "SaveNewPlan") {
4546
      $te_num = $_REQUEST['te_num'];
4547
      $pl_num = SaveNewPlan();
4548
 
4549
      if ($pl_num > 0 && $te_num > 0) {
4550
	 PlanPeriode($pl_num, 0, 0);
4551
      } else if ($pl_num > 0) {
4552
         AddTask($pl_num, 1);
4553
      }
4554
   }
4555
 
4556
   if ($func == "DeletePlan") {
4557
      if (isset($_REQUEST['yes'])) {
4558
         DeletePlan();
4559
	 $pl_num = $_REQUEST['pl_num'];
4560
	 echo "<p class=\"cry\">Plan Nr.: $pl_num wurde erfolgreich gel&ouml;scht!</p>\n";
4561
      }
4562
 
4563
      ShowPlan($rstufe, $menu, $unum);
4564
   }
4565
 
4566
   if ($func == "DeleteTask") {
4567
      if (isset($_REQUEST['yes'])) {
4568
         DeleteTask();
4569
      }
4570
 
4571
      $ta_plnum = $_REQUEST['ta_plnum'];
4572
      PlanPeriode($ta_plnum, 0, 0);
4573
   }
4574
 
4575
   if ($func == "GetColor") {
4576
      GetColor();
4577
   }
4578
 
4579
   if ($func == "SaveTask" || $func == "SaveObsoleteTask") {
4580
      if ($func == "SaveObsoleteTask")
4581
         $doit = true;
4582
      else
4583
         $doit = false;
4584
 
4585
      if (SaveTask($doit)) {
4586
         $ta_plnum = $_REQUEST['ta_plnum'];
4587
         PlanPeriode($ta_plnum, 0, 0);
4588
      } else {
4589
//         $pl_num = $_REQUEST['pl_num'];
4590
         $ta_plnum = $_REQUEST['ta_plnum'];
4591
	 $ta_id = $_REQUEST['ta_id'];
4592
	 $ta_num = $_REQUEST['ta_num'];
4593
 
4594
	 if (isset($ta_num) && $ta_num > 0)
4595
	    EditTask($ta_num);
4596
	 else
4597
            AddTask($ta_plnum, $ta_id);
4598
      }
4599
   }
4600
 
4601
   if ($func == "AddMiAdd") {
4602
      AddMiAdd();
4603
      $al_task = $_REQUEST['al_task'];
4604
      AddMi($al_task);
4605
   }
4606
 
4607
   if ($func == "AllocMa") {
4608
      $pl_num = $_REQUEST['pl_num'];
4609
      PlanPeriode($pl_num, 0, 0, true);
4610
   }
4611
 
4612
   if ($func == "SaveMa") {
4613
      $pl_num = $_REQUEST['pl_num'];
4614
      $yes = $_REQUEST['yes'];
4615
 
4616
      if (isset($yes) && $yes == "yes")
4617
         $yes = true;
4618
      else
4619
         $yes = false;
4620
 
4621
      if (!SaveMa($yes)) {
4622
         PlanPeriode($pl_num, 0, 0, true);
4623
      } else
4624
         PlanPeriode($pl_num, 0, 0);
4625
   }
4626
 
4627
   if ($func == "SaveUpMa") {
4628
      $pl_num = $_REQUEST['pl_num'];
4629
 
4630
      if (!SaveUpMa()) {
4631
	 $ta_num = $_REQUEST['al_task'];
4632
	 $ressource = $_REQUEST['ressource'];
4633
	 PlanPeriode($pl_num, $ta_num, $ressource);
4634
      } else
4635
         PlanPeriode($pl_num, 0, 0);
4636
   }
4637
 
4638
   if ($func == "UpdateMa") {
4639
      $pl_num = $_REQUEST['pl_num'];
4640
      $ta_num = $_REQUEST['al_task'];
4641
      $ressource = $_REQUEST['ressource'];
4642
      PlanPeriode($pl_num, $ta_num, $ressource);
4643
   }
4644
 
4645
   if ($func == "AskDeleteMa") {
4646
      AskDeleteMa();
4647
   }
4648
 
4649
   if ($func == "DeleteMa") {
4650
      if (isset($_REQUEST['yes']))
4651
         DeleteMa();
4652
 
4653
      $pl_num = $_REQUEST['pl_num'];
4654
      PlanPeriode($pl_num, 0, 0);
4655
   }
4656
 
4657
   if ($func == "EditPlStatus") {
4658
      $pl_num = $_REQUEST['pl_num'];
4659
      ShowPlan($rstufe, $menu, $unum, $pl_num);
4660
      $knopf = -1;
4661
   }
4662
 
4663
   if ($func == "UpdatePlan") {
4664
      UpdatePlan();
4665
      ShowPlan($rstufe, $menu, $unum);
4666
      $knopf = -1;
4667
   }
4668
 
4669
   if ($func == "WriteStatus") {
4670
      if ($_REQUEST['yes'] == "yes")
4671
         UpdatePlan(true);
4672
 
4673
      ShowPlan($rstufe, $menu, $unum);
4674
      $knopf = -1;
4675
   }
4676
 
4677
   if ($func == "COMMENT") {
4678
      SavePlanComment();
4679
 
4680
      if (!isset($editplan) || $editplan <= 0) {
4681
	 $pl_num = $_REQUEST['pl_num'];
4682
	 PlanPeriode($pl_num, 0, 0);
4683
      }
4684
   }
4685
 
4686
   if ($func == "PLANSTATUS") {
4687
      $pr_num = $_REQUEST['pr_num'];
4688
      $pl_num = $_REQUEST['pl_num'];
4689
      $lock = $_REQUEST['lock'];
4690
 
4691
      if ($lock)
4692
	 ManageStatus($pr_num, $pl_num, false, true);
4693
      else
4694
	 ManageStatus($pr_num, $pl_num);
4695
   }
4696
 
4697
   if ($func == "SavePlanstatus") {
4698
      SavePlanstatus();
4699
      $pr_num = $_REQUEST['pr_num'];
4700
      $pl_num = $_REQUEST['pl_num'];
4701
      ManageStatus($pr_num, $pl_num, true);
4702
   }
4703
 
4704
   if ($func == "PSEDIT") {
4705
      $pr_num = $_REQUEST['pr_num'];
4706
      $pl_num = $_REQUEST['pl_num'];
4707
      ManageStatus($pr_num, $pl_num, true);
4708
   }
4709
 
4710
   if ($func == "LockM")
4711
      AskLockM();
4712
 
4713
   if ($func == "LockProject") {
4714
      LockProject();
4715
      ShowPlan($rstufe, $menu, $unum);
4716
   }
4717
}
4718
 
4719
# Folgende Abfragen werden dann Aktiv, wenn der Anwender einen der
4720
# Buttons in der ersten Spalte der durch ShowPlan() angezeigten Tabelle
4721
# klickt.
4722
#
4723
if (isset($editplan) && $editplan > 0) {
4724
   $lock = $_REQUEST['lock'];
4725
   PlanPeriode($editplan, 0, 0);
4726
}
4727
 
4728
if (isset($viewplan) && $viewplan > 0) {
4729
   PlanPeriode($viewplan, 0, 0, false, true);
4730
}
4731
 
4732
if (isset($deleteplan) && $deleteplan > 0) {
4733
   AskDelete($deleteplan);
4734
}
4735
 
4736
if (isset($editcopy) && $editcopy > 0) {
4737
   if ($func == "CopyPlan") {
4738
      $yes = $_REQUEST['yes'];
4739
      $cancel = $_REQUEST['cancel'];
4740
 
4741
      if (isset($cancel) && $cancel == "cancel")
4742
         $cancel = true;
4743
      else
4744
         $cancel = false;
4745
 
4746
      if (!isset($yes))
4747
         $yes = false;
4748
      else
4749
         $yes = true;
4750
 
4751
      $doit = true;
4752
   } else {
4753
      $yes = false;
4754
      $doit = false;
4755
   }
4756
 
4757
   if (!$cancel && EditCopy($editcopy, $yes, $doit))
4758
      Error("Plan wurde erfolgreich kopiert!");
4759
   else if (!$cancel)
4760
      Error("Plan konnte nicht kopiert werden!");
4761
   else
4762
      Error("Aktion wurde abgebrochen.");
4763
 
4764
   ShowPlan($rstufe, $menu, $unum);
4765
}
4766
 
4767
if (isset($taskadd) && $taskadd > 0) {
4768
   $ta_plnum = $_REQUEST['ta_plnum'];
4769
   AddTask($ta_plnum, $taskadd);
4770
}
4771
 
4772
if (isset($deletetask) && $deletetask > 0) {
4773
   AskDeleteTask($deletetask);
4774
}
4775
 
4776
if (isset($edittask) && $edittask > 0) {
4777
   EditTask($edittask);
4778
}
4779
 
4780
if (isset($addmi) && $addmi > 0) {
4781
   AddMi($addmi);
4782
}
4783
 
4784
if (isset($addmiadd)) {
4785
   $al_task = $_REQUEST['al_task'];
4786
   AddMi($al_task, 1);
4787
}
4788
 
4789
if (isset($addmidel) && $addmidel > 0) {
4790
   AddMiDel($addmidel);
4791
   $al_task = $_REQUEST['al_task'];
4792
   AddMi($al_task);
4793
}
4794
 
4795
if (isset($movedown) && $movedown > 0) {
4796
   if (MoveTask($movedown, 1)) {
4797
      $pl_num = $_REQUEST['pl_num'];
4798
 
4799
      if (isset($pl_num) && $pl_num > 0)
4800
         PlanPeriode($pl_num, 0, 0);
4801
      else
4802
         Error("Interner Fehler: Plannummer ist verloren gegangen!");
4803
   } else
4804
      Error ("Task konnte nicht verschoben werden!");
4805
}
4806
 
4807
if (isset($moveup) && $moveup > 0) {
4808
   if (MoveTask($moveup, -1)) {
4809
      $pl_num = $_REQUEST['pl_num'];
4810
 
4811
      if (isset($pl_num) && $pl_num > 0)
4812
         PlanPeriode($pl_num, 0, 0);
4813
      else
4814
         Error("Interner Fehler: Plannummer ist verloren gegangen!");
4815
   } else
4816
      Error ("Task konnte nicht verschoben werden!");
4817
}
4818
 
4819
require('footer.inc');
4820
?>