Subversion Repositories public

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 andreas 1
<?php
2
require_once('version.inc');
3
require_once('dbaccess.inc');
4
require_once('language.inc');
5
require_once('header.inc');
6
require_once('settings.inc');
7
require_once('crypt.inc');
8
require_once('helper.inc');
9
 
10
/*
11
0: Verwalter
12
1: Administrator
13
2: Projektleiter
14
3: Mitarbeiter
15
4: Kontroller
16
5: Kein Zugang!
17
6: Ressourcenmanager
18
7: Revisor
19
*/
20
$drm = array(true, false, true, true, false, true, true, true);
21
 
22
if (isset($_REQUEST['pjclose'])) { $knopf = 50; $headline = 41; }
23
 
24
require_once('menu.inc');
25
 
26
/*
27
 * Klassendefinitionen
28
 */
29
class prj_in {
30
   var $arr_prnum;
31
   var $arr_prname;
32
   var $arr_prstat;
33
   var $arr_plnum;
34
   var $arr_abdatum;
35
   var $anz;
36
   var $error;
37
 
38
   function prj_in($db=-1) {
39
      if ($db == -1) {
40
         $db = OpenDB();
41
         $flag = true;
42
      } else
43
         $flag = false;
44
 
45
      $menge = 0;
46
      $query = "select pr_num, pr_name, pr_status from project ";
47
      $query .= "order by pr_num";
48
 
49
      if (!($result = QueryDB($db, $query))) {
50
         if ($flag)
51
            closeDB($db);
52
 
53
	 $this->error = true;
54
	 return;
55
      }
56
 
57
      $num = numrowsDB($result);
58
      $i = 0;
59
 
60
      while ($i < $num) {
61
	 $data = fetchDB($result, $i);
62
	 $pr_num = $data[0];
63
	 $pr_name = $data[1];
64
	 $pr_status = $data[2];
65
 
66
	 $query = "select pl_num, pl_status from plan where ";
67
	 $query .= "pl_prnum = $pr_num and pl_status in (0,2,3,4) ";
68
	 $query .= "order by pl_lfd desc";
69
 
70
	 if (!($respl = QueryDB($db, $query))) {
71
            if ($flag)
72
               closeDB($db);
73
 
74
	    $this->error = true;
75
	    return;
76
	 }
77
 
78
	 if (numrowsDB($respl) > 0) {
79
	    $data = fetchDB($respl, 0);
80
	    $pl_num = $data[0];
81
	    $pl_status = $data[1];
82
 
83
	    $query = "select ab_datum from abschluss where ";
84
	    $query .= "ab_prnum = $pr_num order by ab_datum desc";
85
 
86
	    if (!($resab = QueryDB($db, $query))) {
87
	       if ($flag)
88
	          closeDB($db);
89
 
90
	       $this->error = true;
91
	       return;
92
	    }
93
 
94
	    if (numrowsDB($resab) > 0) {
95
	       $data = fetchDB($resab, 0);
96
	       $this->arr_abdatum[$menge] = $data[0];
97
	    } else
98
	       $this->arr_abdatum[$menge] = 0;
99
 
100
	    $this->arr_prnum[$menge] = $pr_num;
101
	    $this->arr_prname[$menge] = $pr_name;
102
 
103
	    if ($pr_status == 1)
104
	       $this->arr_prstat[$menge] = 0;
105
	    else
106
	       $this->arr_prstat[$menge] = $pl_status;
107
 
108
	    $this->arr_plnum[$menge] = $pl_num;
109
	    $menge++;
110
	 }
111
 
112
	 $i++;
113
      }
114
 
115
      $this->anz = $menge;
116
 
117
      if ($flag)
118
         closeDB($db);
119
 
120
      $this->error = false;
121
   }
122
 
123
   function iserror() {
124
      return $this->error;
125
   }
126
 
127
   function GetCount() {
128
      return $this->anz;
129
   }
130
 
131
   function GetProjectNum($prj) {
132
      if ($prj >= $this->anz)
133
	 return 0;
134
 
135
      return $this->arr_prnum[$prj];
136
   }
137
 
138
   function GetProjectName($prj) {
139
      if ($prj >= $this->anz)
140
	 return 0;
141
 
142
      return $this->arr_prname[$prj];
143
   }
144
 
145
   function GetProjectStatus($prj) {
146
      if ($prj >= $this->anz)
147
	 return 0;
148
 
149
      return $this->arr_prstat[$prj];
150
   }
151
 
152
   function GetProjectPlan($prj) {
153
      if ($prj >= $this->anz)
154
	 return 0;
155
 
156
      return $this->arr_plnum[$prj];
157
   }
158
 
159
   function GetProjectClose($prj) {
160
      if ($prj >= $this->anz)
161
         return 0;
162
 
163
      return $this->arr_abdatum[$prj];
164
   }
165
}
166
 
167
function mask_pjclose() {
168
	global $pj_lock;
169
	global $menu;
170
	global $headline;
171
	global $periode;
172
	global $dtformatshort;
173
 
174
	if (!$pj_lock) {
175
	   Error(GetMessage(-1, 140, "Der Teilabschlu&szlig; von Projekten ist mit der derzeitigen Einstellung nicht erlaubt!"));
176
	   return;
177
	}
178
 
179
	$db = OpenDB();
180
	$prj = new prj_in($db);
181
 
182
	if ($prj->iserror())
183
	   return;
184
?>
185
<form name="lock" action="pjclose.php" method="post">
186
   <input type="hidden" name="menu" value="<? echo "$menu"; ?>">
187
   <input type="hidden" name="headline" value="<? echo "$headline"; ?>">
188
   <input type="hidden" name="func" value="LockProject">
189
<table class="input">
190
   <tr>
191
      <th class="sel" colspan=5><? Output($db, 181, "Projekte abschlie&szlig;en"); ?></th>
192
   </tr>
193
   <tr>
194
      <td colspan=3><? Output($db, 186, "Projekte abschlie&szlig;en bis:"); ?></td>
195
      <td colspan=2>
196
         <select name="ab_datum">
197
<?
198
	# Juengstes Datum ermitteln
199
	$anz = $prj->GetCount();
200
	$i = 0;
201
	$dat = 0;
202
 
203
	while ($i < $anz) {
204
	   if ($dat < $prj->GetProjectClose($i))
205
	      $dat = $prj->GetProjectClose($i);
206
 
207
	   $i++;
208
	}
209
 
210
        # Aeltestes Datum ermittlen
211
	$i = 0;
212
	$dat_low = $dat;
213
 
214
	while ($i < $anz && $dat_low > 0) {
215
	   if ($dat_low > $prj->GetProjectClose($i))
216
	      $dat_low = $prj->GetProjectClose($i);
217
 
218
	   $i++;
219
	}
220
 
221
	# Sicherstellen, dass wir den Monatsultimo verwenden. Zusaetzlich
222
	# kann maximal bis zu einem Jahr in die Vergangenheit abgeschlossen
223
	# werden.
224
 
225
	if ($dat == 0) {
226
	   $day = gmdate("j");
227
	   $mon = gmdate("n");
228
	   $year = gmdate("Y");
229
	   $year--;
230
	   $dat = GetUltimo(gmmktime(0, 0, 0, $mon, $day, $year));
231
	} else {
232
//	   $dat = IncDate($periode, $dat);
233
	   $day = gmdate("j", $dat);
234
	   $mon = gmdate("n", $dat);
235
	   $year = gmdate("Y", $dat);
236
	   $dat = GetUltimo(gmmktime(0, 0, 0, $mon, $day, $year));
237
	}
238
 
239
	if ($dat_low == 0) {
240
	   if ($dat > 0)
241
	      $dt = $dat;
242
	   else
243
	      $dt = time();
244
 
245
	   $day = gmdate("j", $dt);
246
	   $mon = gmdate("n", $dt);
247
	   $year = gmdate("Y", $dt);
248
	   $year--;
249
	   $dat_low = GetUltimo(gmmktime(0, 0, 0, $mon, $day, $year));
250
	} else {
251
	   $dat_low = IncDate($periode, $dat_low);
252
	   $day = gmdate("j", $dat_low);
253
	   $mon = gmdate("n", $dat_low);
254
	   $year = gmdate("Y", $dat_low);
255
	   $dat_low = GetUltimo(gmmktime(0, 0, 0, $mon, $day, $year));
256
	}
257
 
258
	# Heutiges Datum
259
	$day = gmdate("j");
260
	$mon = gmdate("n");
261
	$year = gmdate("Y");
262
	$heute = gmmktime(0, 0, 0, $mon, $day, $year);
263
	$dt = $dat_low;
264
	$i = 0;
265
 
266
	while ($dt < $heute) {
267
	   echo "<option value=\"$dt\"";
268
	   $d = $dt;
269
	   $dt = GetUltimo(IncDate($periode, $dt));
270
 
271
	   if ($dt >= $heute)
272
	      echo " selected>";
273
	   else
274
	      echo ">";
275
 
276
	   echo gmdate($dtformatshort, $d);
277
	   echo "</option>\n";
278
	   $i++;
279
	}
280
 
281
	$dat_high = $d;
282
?>
283
         </select>
284
<?
285
	if ($i == 0)
286
	   Output($db, 188, "Derzeit sind alle Projekte bis zum %s abgeschlossen!", gmdate($dtformatshort, $dat));
287
?>
288
      </td>
289
   </tr>
290
   <tr>
291
      <td colspan=5>
292
         <table border=0>
293
            <tr><td>
294
<?
295
	if ($i > 0)
296
	   Button(GetMessage($db, 185, "Markierte Projekte Abschlie&szlig;en"), "lock");
297
	else
298
	   echo "&nbsp;";
299
?>
300
            </td><td>
301
<? Button(GetMessage($db, 372, "Letzten Abschl. f&uuml;r Mark. Proj. zur&uuml;cknehmen"), "lock",
302
	"func", "RemoveLock"); ?>
303
            </td></tr>
304
	 </table>
305
      </td>
306
   </tr>
307
   <tr>
308
      <th class="sel">&nbsp;</th>
309
      <th class="sel"><? Output($db, 182, "Pr.Nr."); ?></th>
310
      <th class="sel"><? Output($db, 326, "Art"); ?></th>
311
      <th class="sel"><? Output($db, 183, "Projektbezeichnung"); ?></th>
312
      <th class="sel"><? Output($db, 184, "Lzt.Abschl."); ?></th>
313
   </tr>
314
<?
315
	$i = 0;
316
 
317
	while ($i < $anz) {
318
	   echo "<tr><td class=\"selakt\"><input type=\"checkbox\" ";
319
	   echo "name=\"check_" . $prj->GetProjectNum($i) . "\"";
320
 
321
	   if ($prj->GetProjectClose($i) < $dat_high)
322
	      echo " checked";
323
 
324
	   echo "></td>\n";
325
	   echo "<td class=\"sel\">" . $prj->GetProjectNum($i) . "</td>\n";
326
	   echo "<td class=\"sel\">";
327
 
328
	   switch ($prj->GetProjectStatus($i)) {
329
	      case 0: Output($db, 234, "Konto"); break;
330
	      default: Output($db, 262, "Projekt");
331
	   }
332
 
333
	   echo "</td>\n";
334
	   echo "<td class=\"sel\">" . $prj->GetProjectName($i) . "</td>\n";
335
 
336
	   if ($prj->GetProjectClose($i) == 0)
337
	      $datum = "";
338
	   else
339
	      $datum = gmdate($dtformatshort, $prj->GetProjectClose($i));
340
 
341
	   echo "<td class=\"sel\">$datum</td></tr>\n";
342
	   $i++;
343
	}
344
 
345
	echo "</table></form>\n";
346
	closeDB($db);
347
}
348
 
349
function LockProjects() {
350
	global $unum;
351
	$ab_datum = $_REQUEST['ab_datum'];
352
 
353
	if (!isset($ab_datum) || $ab_datum < 1) {
354
	   Error(GetMessage(-1, 187, "Interner Fehler: LockProjects: Abschlu&szlig;datum fehlt!"));
355
	   return;
356
	}
357
 
358
	$db = OpenDB();
359
	$prj = new prj_in($db);
360
 
361
	if ($prj->iserror()) {
362
	   closeDB();
363
	   return;
364
	}
365
 
366
	$query = "select co_abschluss from counter";
367
 
368
	if (!($result = QueryDB($db, $query))) {
369
	   closeDB($db);
370
	   return;
371
	}
372
 
373
	$data = fetchDB($result, 0);
374
	$co_abschluss = $data[0] + 1;
375
	$anz = $prj->GetCount();
376
	$i = 0;
377
	$query = "insert into abschluss (ab_num, ab_datum, ab_user, ab_prnum, ab_plnum) ";
378
	$query .= "values (";
379
 
380
	if (!QueryDB($db, "begin")) {
381
	   closeDB($db);
382
	   return;
383
	}
384
 
385
	while ($i < $anz) {
386
	   $cname = "check_" . $prj->GetProjectNum($i);
387
	   $check = $_REQUEST[$cname];
388
 
389
	   if (!isset($check)) {
390
	      $i++;
391
	      continue;
392
	   }
393
 
394
	   # Abschluss in die Tabelle "abschluss" schreiben
395
	   $q = "$co_abschluss, $ab_datum, $unum, ";
396
	   $q .= $prj->GetProjectNum($i) . ", ";
397
	   $q .= $prj->GetProjectPlan($i) . ")";
398
 
399
	   if (!QueryDB($db, $query . $q)) {
400
	      QueryDB($db, "rollback");
401
	      closeDB($db);
402
	      return;
403
	   }
404
 
405
	   # Alle IST-Buchungen bis zum Abschlussdatum auf NICHT editierbar
406
	   # setzen.
407
	   $q = "update wdone set wd_edit = 'false' where ";
408
	   $q .= "wd_prnum = " . $prj->GetProjectNum($i) . " and ";
409
	   $q .= "wd_datum <= $ab_datum";
410
 
411
	   if (!QueryDB($db, $q)) {
412
	      QueryDB($db, "rollback");
413
	      closeDB($db);
414
	      return;
415
	   }
416
 
417
	   $i++;
418
	   $co_abschluss++;
419
	}
420
 
421
	if (!QueryDB($db, "update counter set co_abschluss = $co_abschluss")) {
422
	   QueryDB($db, "rollback");
423
	   closeDB($db);
424
	   return;
425
	}
426
 
427
	if (!QueryDB($db, "commit"))
428
	   QueryDB($db, "rollback");
429
 
430
	closeDB($db);
431
}
432
 
433
function RemoveLock() {
434
	global $unum;
435
 
436
	$db = OpenDB();
437
	$prj = new prj_in($db);
438
 
439
	if ($prj->iserror()) {
440
	   closeDB();
441
	   return;
442
	}
443
 
444
	$anz = $prj->GetCount();
445
	$i = 0;
446
 
447
	if (!QueryDB($db, "begin")) {
448
	   closeDB($db);
449
	   return;
450
	}
451
 
452
	while ($i < $anz) {
453
	   $cname = "check_" . $prj->GetProjectNum($i);
454
	   $check = $_REQUEST[$cname];
455
 
456
	   if (!isset($check)) {
457
	      $i++;
458
	      continue;
459
	   }
460
 
461
	   $query = "select ab_num, ab_datum from abschluss where ab_prnum = ";
462
	   $query .= $prj->GetProjectNum($i) . "order by ab_datum desc";
463
 
464
	   if (!($result = QueryDB($db, $query))) {
465
	      closeDB($db);
466
	      return;
467
	   }
468
 
469
	   $menge = numrowsDB($result);
470
 
471
	   if ($menge > 0) {
472
	      $data = fetchDB($result, 0);
473
	      $ab_num = $data[0];
474
 
475
	      if ($menge > 1) {
476
		 $data = fetchDB($result, 1);
477
		 $last_abdatum = $data[1];
478
	      } else
479
		 $last_abdatum = 0;
480
 
481
	      $query = "delete from abschluss where ab_num = $ab_num";
482
 
483
	      if (!QueryDB($db, $query)) {
484
		 QueryDB($db, "rollback");
485
		 closeDB($db);
486
		 return;
487
	      }
488
 
489
	      $query = "update wdone set wd_edit = true where ";
490
	      $query .= "wd_prnum = " . $prj->GetProjectNum($i) . " and ";
491
	      $query .= "wd_datum > $last_abdatum";
492
 
493
	      if (!QueryDB($db, $query)) {
494
		 QueryDB($db, "rollback");
495
		 closeDB($db);
496
		 return;
497
	      }
498
	   }
499
 
500
	   $i++;
501
	}
502
 
503
	QueryDB($db, "commit");
504
	closeDB($db);
505
}
506
 
507
if ($knopf == 50)
508
   mask_pjclose();
509
 
510
$func = $_REQUEST['func'];
511
 
512
if ($func == "RemoveLock") {
513
   $func = "";
514
   RemoveLock();
515
   mask_pjclose();
516
}
517
 
518
if ($func == "LockProject") {
519
   LockProjects();
520
   mask_pjclose();
521
}
522
 
523
require_once('footer.inc');