Location: PHPKode > projects > TheoPlan > pm/kunden.php
<?
require_once('version.inc');
require_once('dbaccess.inc');
require_once('language.inc');
require_once('header.inc');
require_once('settings.inc');
require_once('crypt.inc');
require_once('helper.inc');

if (isset($_REQUEST['kunde'])) { $knopf = 43; $headline = 34; }
if (isset($_REQUEST['kgroup'])) { $knopf = 48; $headline = 39; }
/*
0: Verwalter
1: Administrator
2: Projektleiter
3: Mitarbeiter
4: Kontroller
5: Kein Zugang!
6: Ressourcenmanager
7: Revisor
*/
$drm = array(true, false, true, true, false, true, true, true);

require_once('menu.inc');

# Erzeugt eine Liste aller Kunden in der Datenbank. Der Anwender kann mittels
# einiger Buttons neue Eintraege hinzufuegen, bestehende aendern, oder
# loeschen.
function ListKunde() {
	global $headline;
	global $menu;
	global $rstufe;
	global $fixkunde;

	# Zunaechst pruefen wir, ob der Anwender ueberhaupt dazu berechtigt
	# ist.
	if ($rstufe != 1 && $rstufe != 4) {
	   Error("Berechtigungsfehler!\n");
	   return;
	}

	$nav = "menu=$menu&headline=$headline";
	echo "<form name=\"ekunde\" action=\"kunden.php\" method=\"post\">\n";
	echo "<input type=\"hidden\" name=\"headline\" value=\"$headline\">\n";
	echo "<input type=\"hidden\" name=\"menu\" value=\"$menu\">\n";
	echo "<input type=\"hidden\" name=\"func\" value=\"new\">\n";
	echo "<table class=\"indent\"><tr><td>\n";
	Button("Neuer Kunde", "ekunde");
	echo "</td></tr></table>\n";

	$db = OpenDB();
	$query = "select count(*) from kunde";
	$result = QueryDB($db, $query);
	$data = fetchDB($result, 0);

	if ($data[0] > 0) {
	   echo "<table class=\"sel\">\n";
	   echo "<tr><th class=\"sel\">Aktion</th><th class=\"sel\">Firma</th>";
	   echo "<th class=\"sel\">Name</th><th class=\"sel\">Kostenstelle</th>";

	   if ($fixkunde)
	      echo "<th class=\"sel\">Anteil</th><th class=\"sel\">G&uuml;ltig ab</th>";

	   echo "</tr>\n";

	   $query = "select ku_num, ku_firma, ku_nname, ku_vname, ku_costloc,";
	   $query .= "kc_costloc from kunde left join key_costloc on kc_num = ku_costloc ";
	   $query .= "order by ku_firma, ku_nname, ku_vname";
	   $result = QueryDB($db, $query);
	   $numrows = numrowsDB($result);
	   $row = 0;
	   $anz = 0;

	   while ($row < $numrows) {
	      $data = fetchDB($result, $row);
	      $ku_num = $data[0];
	      $ku_firma = $data[1];
	      $ku_nname = $data[2];
	      $ku_vname = $data[3];
	      $ku_costloc = $data[4];
	      $kc_costloc = $data[5];

	      # Pruefen, ob der Kunde bereits einer Gruppe zugeordnet
	      # wurde.
	      $query = "select count(*) from kgsammel where ks_kunum = $ku_num";

	      if (!($reskg = QueryDB($db, $query))) {
		 closeDB($db);
		 return;
	      }

	      $data = fetchDB($reskg, 0);
	      $anz = $data[0];

	      if ($fixkunde) {
		 $dtdb = GetDBDateFormat();
		 $query = "select fx_proz, to_char(fx_valid_from, '$dtdb') ";
		 $query .= "from fixanteil where fx_valid_to is NULL ";
		 $query .= "and fx_kunum = $ku_num";

		 if (!($resfx = QueryDB($db, $query))) {
		    closeDB($db);
		    return;
		 }

		 if (numrowsDB($resfx) > 0) {
		    $data = fetchDB($resfx, 0);
		    $fx_proz = $data[0];
		    $fx_valid_from = $data[1];
		 } else {
		    $fx_proz = 0.0;
		    $fx_valid_from = "&nbsp;";
		 }
	      }

	      echo "<tr><td class=\"selakt\"><a href=\"#\" onClick=\"javascript:MoveTo('kunden.php','func=edit&ku_num=$ku_num&$nav')\"><img src=\"image/edit.png\" border=0 alt=\"Edit\"></a>";

	      if ($anz <= 0)
	         echo "<a href=\"#\" onClick=\"javascript:MoveTo('kunden.php','func=del&ku_num=$ku_num&$nav')\"><img src=\"image/editdelete.png\" border=0 alt=\"Loeschen\"></a>";

	      echo "</td>\n";
	      echo "<td class=\"sel\">$ku_firma</td>\n";
	      echo "<td class=\"sel\">$ku_nname $ku_vname</td>\n";

	      if (isset($ku_costloc) || isset($kc_costloc))
	         echo "<td class=\"sel\">$ku_costloc: $kc_costloc</td>\n";
	      else
	         echo "<td class=\"sel\">&nbsp;</td>\n";

	      if ($fixkunde) {
	         echo "<td class=\"selnum\">" . FormatNum($fx_proz, 3) . "</td>\n";
	         echo "<td class=\"sel\">$fx_valid_from</td>\n";
	      }

	      echo "</tr>\n";
	      $row++;
	   }

	   echo "</table>\n";
	   echo "<table class=\"indent\"><tr><td>\n";
	   Button("Neuer Kunde", "ekunde");
	   echo "</td></tr></table>\n";
	}

	echo "</form>\n";
	closeDB($db);
}

# Die folgende Funktion stellt eine Maske zum Editieren eines einzelnen
# Kunden bereit. Die Funktion kann mit neuen Eintraegen als auch mit
# bestehenden Eintraegen umgehen.
#
function EditKunde() {
	global $headline;
	global $menu;
	global $fixkunde;
	global $VisualDate;
	global $dtformatshort;

	$ku_num = $_REQUEST['ku_num'];
	$db = OpenDB();
	$art = 0;	// 0 = neu, 1 = edit, 2 = ausbessern

	if (isset($ku_num) && $ku_num > 0) {
	   $art = 1;
	   $query = "select ku_firma, ku_anrede, ka_anrede, ku_nname, ku_vname, ";
	   $query .= "ku_strasse, ku_hnum, ku_ort, ku_plz, ku_costloc, ";
	   $query .= "kc_costloc from kunde ";
	   $query .= "left join key_anrede on ka_num = ku_anrede ";
	   $query .= "left join key_costloc on kc_num = ku_costloc ";
	   $query .= "where ku_num = $ku_num";

	   if (!($result = QueryDB($db, $query))) {
	      closeDB($db);
	      return false;
	   }

	   $data = fetchDB($result, 0);
	   $ku_firma = $data[0];
	   $ku_anrede = $data[1];
	   $ka_anrede = $data[2];
	   $ku_nname = $data[3];
	   $ku_vname = $data[4];
	   $ku_strasse = $data[5];
	   $ku_hnum = $data[6];
	   $ku_ort = $data[7];
	   $ku_plz = $data[8];
	   $ku_costloc = $data[9];
	   $kc_costloc = $data[10];

	   # Aktuellen Prozentsatz der Beteiligung ermitteln.
	   if ($fixkunde) {
	      $dtdb = GetDBDateFormat();
	      $query = "select fx_num, fx_proz, to_char(fx_valid_from, '$dtdb') from fixanteil where ";
	      $query .= "fx_valid_to is NULL and fx_kunum = $ku_num order by fx_valid_from desc";

	      if (!($result = QueryDB($db, $query))) {
	         closeDB($db);
	         return false;
	      }

	      if (numrowsDB($result) > 0) {
		 $data = fetchDB($result, 0);
		 $fx_num = $data[0];
		 $fx_proz = $data[1];
		 $fx_valid_from = $data[2];
	      } else {
		 $fx_num = 0;
		 $fx_proz = 0.0;
		 $fx_valid_from = date($dtformatshort);
	      }
	   }
	} else {
	   $ku_num = $_REQUEST['ku_num'];

	   if (isset($ku_num) && $ku_num > 0)
	      $art = 2;
	   else
	      $art = 0;

	   $ku_firma = $_REQUEST['ku_firma'];
	   $ku_anrede = $_REQUEST['ku_anrede'];
	   $ku_nname = $_REQUEST['ku_nname'];
	   $ku_vname = $_REQUEST['ku_vname'];
	   $ku_strasse = $_REQUEST['ku_strasse'];
	   $ku_hnum = $_REQUEST['ku_hnum'];
	   $ku_ort = $_REQUEST['ku_ort'];
	   $ku_plz = $_REQUEST['ku_plz'];
	   $ku_costloc = $_REQUEST['ku_costloc'];

	   if ($fixkunde) {
	      $fx_num = $_REQUEST['fx_num'];
	      $fx_proz = $_REQUEST['fx_proz'];
	      $fx_valid_from = $_REQUEST['fx_valid_from'];
	   }
	}

	$nav = "menu=$menu&headline=$headline";
?>
<form name="kedit" action="kunden.php" method="post">
   <input type="hidden" name="menu" value="<? echo "$menu"; ?>">
   <input type="hidden" name="headline" value="<? echo "$headline"; ?>">
   <input type="hidden" name="ku_num" value="<? echo "$ku_num"; ?>">
   <input type="hidden" name="fx_num" value="<? echo "$fx_num"; ?>">
   <input type="hidden" name="func" value="SaveKunde">
<table class="input">
   <tr>
      <th class="sel" colspan=2>
<?
	switch($art) {
	   case 0: echo "Neuerfassung eines Kunden"; break;
	   case 1: echo "Editieren eines Kunden"; break;
	   case 2: echo "Korrektur eines Kunden"; break;
	}
?>
      </th>
   </tr>
   <tr>
      <td>Firmenname:</td>
      <td><input type="text" name="ku_firma" value="<? echo "$ku_firma"; ?>" size=40 maxlength=80></td>
   </tr>
   <tr>
      <td>Anrede:</td>
      <td><select name="ku_anrede">
             <option value=""></option>
<?
	$query = "select ka_num, ka_anrede from key_anrede order by ka_anrede";

	if (!($reska = QueryDB($db, $query))) {
	   closeDB($db);
	   return false;
	}

	$rows = numrowsDB($reska);
	$j = 0;

	while ($j < $rows) {
	   $data = fetchDB($reska, $j);
	   $ka_num = $data[0];
	   $ka_anrede = $data[1];

	   if (isset($ku_anrede) && $ku_anrede == $ka_num)
	      echo "<option value=\"$ka_num\" selected>$ka_anrede</option>\n";
	   else
	      echo "<option value=\"$ka_num\">$ka_anrede</option>\n";

	   $j++;
	}
?>
          </select>
      </td>
   </tr>
   <tr>
      <td>Nachname:</td>
      <td><input type="text" name="ku_nname" value="<? echo "$ku_nname"; ?>" size=40 maxlength=60></td>
   </tr>
   <tr>
      <td>Vorname:</td>
      <td><input type="text" name="ku_vname" value="<? echo "$ku_vname"; ?>" size=40 maxlength=60></td>
   </tr>
   <tr>
      <td>Stra&szlig;e</td>
      <td><input type="text" name="ku_strasse" value="<? echo "$ku_strasse"; ?>" size=40 maxlength=60></td>
   </tr>
   <tr>
      <td>Hausnummer:</td>
      <td><input type="text" name="ku_hnum" value="<? echo "$ku_hnum"; ?>" size=10 maxlength=10></td>
   </tr>
   <tr>
      <td>Postleitzahl / Ort:</td>
      <td><table border=0 cellspacing=0 cellpadding=0>
             <tr>
	        <td><input type="text" name="ku_plz" value="<? echo "$ku_plz"; ?>" size=16 maxlength=16></td>
		<td><input type="text" name="ku_ort" value="<? echo "$ku_ort"; ?>" size=40 maxlength=60></td>
	     </tr>
	  </table>
      </td>
   </tr>
   <tr>
      <td>Kostenstelle:</td>
      <td><select name="ku_costloc">
             <option value=""></option>
<?
	$query = "select kc_num, kc_costloc from key_costloc order by kc_costloc";

	if (!($reskc = QueryDB($db, $query))) {
	   closeDB($db);
	   return false;
	}

	$rows = numrowsDB($reskc);
	$j = 0;

	while ($j < $rows) {
	   $data = fetchDB($reskc, $j);
	   $kc_num = $data[0];
	   $kc_costloc = $data[1];

	   if (isset($ku_costloc) && $kc_num == $ku_costloc)
	      echo "<option value=\"$kc_num\" selected>$kc_num: $kc_costloc</option>\n";
	   else
	      echo "<option value=\"$kc_num\">$kc_num: $kc_costloc</option>\n";

	   $j++;
	}
?>
          </select>
      </td>
   </tr>
<?
	if ($fixkunde) {
?>
   <tr>
      <td>Anteil in Prozent:</td>
      <td><input type="text" class="inputmust" name="fx_proz" value="<? echo FormatNum($fx_proz, 2); ?>" size=6 maxlength=6 onChange="javascript:NumRange(this, 0.0, 100.0)">%</td>
   </tr>
   <tr>
      <td>Anteil g&uuml;ltig ab (<? echo "$VisualDate"; ?>):</td>
      <td><input type="text" class="inputmust" name="fx_valid_from" value="<? echo "$fx_valid_from"; ?>" size=10 maxlength=10 onChange="javascript:CheckDate(this, false)"></td>
   </tr>
<?
	}
?>
</table>
<table class="indent">
   <tr><td>
<?
	ButtonSubmit("Speichern", "kedit");
	echo "</td></tr></table>\n";
	return true;
}

# Folgende Funktion speichert einen zuvor neu erfassten, oder editierten
# Kunden in die Datenbank.
#
function SaveKunde() {
	global $fixkunde;

	$ku_num = $_REQUEST['ku_num'];
	$ku_firma = $_REQUEST['ku_firma'];
	$ku_anrede = $_REQUEST['ku_anrede'];
	$ku_nname = $_REQUEST['ku_nname'];
	$ku_vname = $_REQUEST['ku_vname'];
	$ku_strasse = $_REQUEST['ku_strasse'];
	$ku_hnum = $_REQUEST['ku_hnum'];
	$ku_ort = $_REQUEST['ku_ort'];
	$ku_plz = $_REQUEST['ku_plz'];
	$ku_costloc = $_REQUEST['ku_costloc'];

	if ($fixkunde) {
	   $fx_num = $_REQUEST['fx_num'];
	   $fx_proz = $_REQUEST['fx_proz'];
	   $fx_valid_from = $_REQUEST['fx_valid_from'];

	   if (strlen($fx_proz) > 0)
	      $fx_proz = str_replace(",", ".", $fx_proz);
	}

	$err = 0;

	if (isset($ku_num) && $ku_num > 0)
	   $update = true;
	else
	   $update = false;

	if ((!isset($ku_nname) || !isset($ku_vname)) && !isset($ku_firma)) {
	   Error("Es muss ein Nachname und ein Vorname, oder ein Firmenname eingegeben werden!");
	   $err = 1;
	}

	if ((!strlen($ku_nname) || !strlen($ku_vname)) && !strlen($ku_firma)) {
	   Error("Es muss ein Nachname und ein Vorname, oder ein Firmenname eingegeben werden!");
	   $err = 1;
	}

	if ($err)
	   return false;

	if (!isset($ku_anrede) || strlen($ku_anrede) == 0)
	   $ku_anrede = "NULL";

	if (!isset($ku_costloc) || strlen($ku_costloc) == 0)
	   $ku_costloc = "NULL";

	$db = OpenDB();

	if ($update) {
	   if (!QueryDB($db, "begin")) {
	      closeDB($db);
	      return false;
	   }

	   $query = "update kunde set ku_firma = '$ku_firma', ";
	   $query .= "ku_anrede = $ku_anrede";
	   $query .= ", ku_vname = '$ku_vname', ";
	   $query .= "ku_nname = '$ku_nname', ku_strasse = '$ku_strasse', ";
	   $query .= "ku_hnum = '$ku_hnum', ku_ort = '$ku_ort', ";
	   $query .= "ku_plz = '$ku_plz' ";
	   $query .= ", ku_costloc = $ku_costloc ";
	   $query .= "where ku_num = $ku_num";

	   if (!QueryDB($db, $query)) {
	      closeDB($db);
	      return false;
	   }

	   if ($fixkunde && isset($fx_num) && $fx_num > 0) {
	      $query = "select fx_proz, to_char(fx_valid_from, 'YYYY-MM-DD') ";
	      $query .= "from fixanteil where fx_num = $fx_num";

	      if (!($result = QueryDB($db, $query))) {
		 QueryDB($db, "rollback");
		 closeDB($db);
		 return false;
	      }

	      $data = fetchDB($result, 0);
	      $fx_proz_old = $data[0];
	      $fx_valid_from_old = $data[1];
	   } else if ($fixkunde) {
	      $fx_proz_old = -1;
	      $fx_valid_from_old = "";
	   }

	   if ($fixkunde && ($fx_proz_old != $fx_proz || $fx_valid_from_old != DateToDBDate($fx_valid_from))) {
	      if ($fx_valid_from_old != DateToDBDate($fx_valid_from)) {
		 $query = "select co_fixanteil from counter";

		 if (!($result = QueryDB($db, $query))) {
		    QueryDB($db, "rollback");
		    closeDB($db);
		    return false;
		 }

		 $data = fetchDB($result, 0);
		 $co_fixanteil = $data[0] + 1;

		 $query = "insert into fixanteil (fx_num, fx_valid_from, fx_kunum,";
		 $query .= "fx_proz) values ($co_fixanteil, '". DateToDBDate($fx_valid_from) . "',";
		 $query .= "$ku_num, $fx_proz)";

		 if (!QueryDB($db, $query)) {
		    QueryDB($db, "rollback");
		    closeDB($db);
		    return false;
		 }

		 if (isset($fx_num) && $fx_num > 0) {
		    $query = "update fixanteil set fx_valid_to = '" . DateToDBDate($fx_valid_from) . "' ";
		    $query .= "where fx_num = $fx_num";

		    if (!QueryDB($db, $query)) {
		       QueryDB($db, "rollback");
		       closeDB($db);
		       return false;
		    }
		 }

		 $query = "update counter set co_fixanteil = $co_fixanteil";

		 if (!QueryDB($db, $query)) {
		    QueryDB($db, "rollback");
		    closeDB($db);
		    return false;
		 }
	      } else {
		 $query = "update fixanteil set fx_proz = $fx_proz where ";
		 $query .= "fx_num = $fx_num";

		 if (!QueryDB($db, $query)) {
		    QueryDB($db, "rollback");
		    closeDB($db);
		    return false;
		 }
	      }
	   }

	   QueryDB($db, "commit");
	} else {
	   $query = "select co_kunde from counter";

	   if (!($result = QueryDB($db, $query))) {
	      closeDB($db);
	      return false;
	   }

	   $data = fetchDB($result, 0);
	   $co_kunde = $data[0] + 1;

	   if (!QueryDB($db, "begin")) {
	      closeDB($db);
	      return false;
	   }

	   $query = "insert into kunde (ku_num, ku_firma";

	   if (isset($ku_anrede) && $ku_anrede > 0)
	      $query .= ", ku_anrede";

	   $query .= ", ku_vname, ku_nname, ku_strasse, ku_hnum, ku_ort, ku_plz ";

	   if (isset($ku_costloc) && $ku_costloc > 0)
	      $query .= ", ku_costloc";

	   $query .= ") values ($co_kunde, '$ku_firma'";

	   if (isset($ku_anrede) && $ku_anrede > 0)
	      $query .= ", $ku_anrede ";

	   $query .= ", '$ku_vname', '$ku_nname', '$ku_strasse', '$ku_hnum', ";
	   $query .= "'$ku_ort', '$ku_plz'";

	   if (isset($ku_costloc) && $ku_costloc > 0)
	      $query .= ", $ku_costloc";

	   $query .= ")";

	   if (!QueryDB($db, $query)) {
	      QueryDB($db, "rollback");
	      closeDB($db);
	      return false;
	   }

	   $query = "update counter set co_kunde = $co_kunde";

	   if (!QueryDB($db, $query)) {
	      QueryDB($db, "rollback");
	      closeDB($db);
	      return false;
	   }

	   if ($fixkunde) {
	      $query = "select co_fixanteil from counter";

	      if (!($result = QueryDB($db, $query))) {
		 QueryDB($db, "rollback");
		 closeDB($db);
		 return false;
	      }

	      $data = fetchDB($result, 0);
	      $co_fixanteil = $data[0] + 1;

	      $query = "insert into fixanteil (fx_num, fx_valid_from, fx_kunum,";
	      $query .= "fx_proz) values ($co_fixanteil, '". DateToDBDate($fx_valid_from) . "',";
	      $query .= "$co_kunde, $fx_proz)";

	      if (!QueryDB($db, $query)) {
		 QueryDB($db, "rollback");
		 closeDB($db);
		 return false;
	      }

	      $query = "update counter set co_fixanteil = $co_fixanteil";

	      if (!QueryDB($db, $query)) {
		 QueryDB($db, "rollback");
		 closeDB($db);
		 return false;
	      }
	   }

	   QueryDB($db, "commit");
	}

	closeDB($db);
	return true;
}

# Wenn der Anwender auf den Loeschknopf gedrueckt hat, wird die folgende
# Funktion aufgerufen, welche den Anwender um die Verifizierung der Loeschung
# fragt. Bereits die Funktion ListKunde() stellt sicher, dass nur jene Kunden
# geloescht werden koennen, welche noch in keiner Kundengruppe sind.
#
function AskDelKunde() {
	global $menu;
	global $headline;

	$ku_num = $_REQUEST['ku_num'];

	if (!isset($ku_num) || $ku_num <= 0) {
	   Error("AskDelKunde: Interner Fehler: Kundennummer wurde nicht &uuml;bergeben!");
	   return;
	}

	$nav = "func=SaveKundeReal&ku_num=$ku_num&menu=$menu&headline=$headline";
	$db = OpenDB();
	$query = "select ku_firma, ku_nname, ku_vname from kunde where ku_num = $ku_num";

	if (!($result = QueryDB($db, $query))) {
	   closeDB($db);
	   return;
	}

	$data = fetchDB($result, 0);
	$ku_firma = $data[0];
	$ku_nname = $data[1];
	$ku_vname = $data[2];
?>
<br>
<form action="kunden.php" method="post">
<table border=2 class="alarm">
   <tr><td colspan=2><big>Warnung!</big><br><br>
           Wollen Sie den Kunden 
	   <font color="white"><? echo "$ku_firma / $ku_nname $ku_vname"; ?></font>
	   wirklich unwiederbringlich l&ouml;schen?
      </td>
   </tr>
   <tr>
      <td><center><input type="button" name="yes" value="Kunden Löschen" onClick="javascript:MoveTo('kunden.php','yes=yes&<? echo "$nav"; ?>')"></center></td>
      <td><center><input type="button" name="no" value="Abbruch" onClick="javascript:MoveTo('kunden.php','no=no&<? echo "$nav"; ?>')"></center></td>
   </tr>
</table>
</form>
<?php
}

# Folgende Funktion loescht einen Kunden aus der Datenbank. Eine Loeschung
# ist nur dann moeglich, wenn selbige zuvor durch den Anwender ausdruecklich
# gewuenscht wurde.
#
function DelKunde() {
	global $fixkunde;

	$ku_num = $_REQUEST['ku_num'];

	if (!isset($ku_num) || $ku_num <= 0) {
	   Error("DelKunde: Interner Fehler: Kundennummer wurde nicht &uuml;bergeben!");
	   return;
	}

	$db = OpenDB();

	if (!QueryDB($db, "begin")) {
	   closeDB($db);
	   return;
	}
	
	if ($fixkunde) {
	   $query = "delete from fixanteil where fx_kunum = $ku_num";

	   if (!QueryDB($db, $query)) {
	      QueryDB($db, "rollback");
	      closeDB($db);
	      return;
	   }
	}

	$query = "delete from kunde where ku_num = $ku_num";

	if (!QueryDB($db, $query)) {
	   QueryDB($db, "rollback");
	   closeDB($db);
	   return;
	}

	QueryDB($db, "commit");
	closeDB($db);
}

/*----------------------------------------------------------------------------*/
# Folgende Funktion erzeugt eine Liste aller Kundengruppen, und stellt die
# Moeglichkeit zur Anlage neuer Kundengruppen, sowie deren Editierung zur
# Verfuegung.
#
function ListKGroups() {
	global $rstufe;
	global $menu;
	global $headline;
	
	if ($rstufe != 1 && $rstufe != 4) {
	   Error("Berechtigungsfehler!");
	   return;
	}

	$nav = "menu=$menu&headline=$headline";
	$db = OpenDB();
	$query = "select kg_num, kg_name, kg_prnum from kgroup ";
	$query .= "order by kg_name";

	if (!($result = QueryDB($db, $query))) {
	   closeDB($db);
	   return;
	}

	$rows = numrowsDB($result);
	$j = 0;
	echo "<table class=\"indent\"><tr><td>\n";
	ButtonLink("Neue Kundengruppe", "kunden.php", "func=NewKGroup&$nav");
	echo "</td></tr></table>\n";
?>
<table class="sel">
   <tr>
      <th class="sel">Aktion</th>
      <th class="sel">Kundengruppe</th>
      <th class="sel">Projekt</th>
   </tr>
<?
	while ($j < $rows) {
	   $data = fetchDB($result, $j);
	   $kg_num = $data[0];
	   $kg_name = $data[1];
	   $kg_prnum = $data[2];

	   $query = "select count(*) from kgsammel where ";
	   $query .= "ks_kgnum = $kg_num";

	   if (!($resks = QueryDB($db, $query))) {
	      closeDB($db);
	      return;
	   }

	   $data = fetchDB($resks, 0);
	   $anz = $data[0];

	   echo "<tr><td class=\"selakt\">";
	   ButtonImageMove("edit.png", "Editieren", "kunden.php",
	   	"func=EditKGroup&kg_num=$kg_num&kg_name=$kg_name&kg_prnum=$kg_prnum&$nav");

	   if ($anz <= 0)
	      ButtonImageMove("editdelete.png", "Loeschen", "kunden.php", "func=DelKGroup&kg_num=$kg_num&$nav");

	   echo "</td>\n";
	   echo "<td class=\"sel\">$kg_name</td>\n";

	   if (isset($kg_prnum) && $kg_prnum > 0) {
	      $query = "select pr_name from project where pr_num = $kg_prnum";

	      if (!($respr = QueryDB($db, $query))) {
	         closeDB($db);
	         return;
	      }

	      $data = fetchDB($respr, 0);
	      $pr_name = $data[0];
	      echo "<td class=\"sel\">$kg_prnum $pr_name</td></tr>\n";
	   } else
	      echo "<td class=\"sel\">&nbsp;</td></tr>\n";

	   $j++;
	}

	echo "</table>\n";
	echo "<table class=\"indent\"><tr><td>\n";
	ButtonLink("Neue Kundengruppe", "kunden.php", "func=NewKGroup&$nav");
	echo "</td></tr></table>\n";
	closeDB($db);
}

# Folgende Funktion fuegt einer Kundengruppe einen neuen Kunden hinzu. Die
# Funktion listet alle kunden auf, welche noch nicht der Gruppe zugeordnet
# wurden und erlaubt eine Auswahl aus der Liste.
#
# Der Aufruf der Funktion erfolgt aus EditKGroup()
#
function AddKunde($db=-1) {
	global $fixkunde;
	global $menu;
	global $headline;

	$kg_num = $_REQUEST['kg_num'];
	$kg_name = $_REQUEST['kg_name'];
	$kg_prnum = $_REQUEST['kg_prnum'];

	if (!isset($kg_num) || $kg_num <= 0) {
	   Error("AddKunde: Interner Fehler: Gruppennummer wurde nicht &uuml;bergeben!");
	   return;
	}

	if ($db == -1)
	   $db = OpenDB();

	$query = "select ku_num, ku_firma, ku_vname, ku_nname from kunde ";
	$query .= "where ku_num not in (select ks_kunum from kgsammel where ";
	$query .= "ks_kgnum = $kg_num) order by ku_firma, ku_nname, ku_vname";

	if (!($result = QueryDB($db, $query))) {
	   closeDB($db);
	   return;
	}

	$rows = numrowsDB($result);
	$j = 0;

	if ($rows > 0) {
?>
   <tr>
      <td class="input_ltb">Neuer Kunde:</td>
      <td class="input_rtb">
         <table border=0 cellspacing=0 cellpadding=0><tr><td>
          <select name="ku_num">
<?
	   while ($j < $rows) {
	      $data = fetchDB($result, $j);
	      $ku_num = $data[0];
	      $ku_firma = $data[1];
	      $ku_vname = $data[2];
	      $ku_nname = $data[3];
	      echo "<option value=\"$ku_num\">$ku_firma";

	      if (isset($ku_nname) && strlen($ku_nname) > 0)
		 echo " / $ku_nname $ku_vname";

	      echo "</option>\n";
	      $j++;
	   }
?>
          </select></td>
          <td>
<?
	   Button("Kunde hinzuf&uuml;gen", "kgroup", "func", "AddGroupKunde");
?>
         </td></tr></table>
      </td>
   </tr>
   <tr>
      <th class="sel" colspan=2>Kundenliste</td>
   </tr>
   <tr>
      <td colspan = 2>
      <table class="sel">
         <tr>
            <th class="sel">Akt.</th>
            <th class="sel">Firma</th>
            <th class="sel">Name</th>
<?
	   if ($fixkunde) {
?>
            <th class="sel">Anteil Schl.</th>
            <th class="sel">Anteil Proj.</th>
<?
	   }
?>
         </tr>
<?
	   $query = "select ks_num, ks_kunum, ku_firma, ku_vname, ku_nname from ";
	   $query .= "kgsammel, kunde where ku_num = ks_kunum and ";
	   $query .= "ks_kgnum = $kg_num order by ku_firma, ku_nname, ku_vname";

	   if (!($result = QueryDB($db, $query))) {
	      closeDB($db);
	      return;
	   }

	   $rows = numrowsDB($result);
	   $j = 0;

	   if ($fixkunde) {
	      $query = "select sum(fx_proz) from fixanteil where ";
	      $query .= "fx_valid_to is NULL and fx_kunum in ";
	      $query .= "(select ks_kunum from kgsammel where ks_kgnum = $kg_num)";

	      if (!($resks = QueryDB($db, $query))) {
		 closeDB($db);
		 return;
	      }

	      $data = fetchDB($resks, 0);
	      $sum_proz = $data[0];
	      $sum_ant1 = 0.0;
	      $sum_ant2 = 0.0;
	   }

	   while ($j < $rows) {
	      $data = fetchDB($result, $j);
	      $ks_num = $data[0];
	      $ks_kunum = $data[1];
	      $ku_firma = $data[2];
	      $ku_vname = $data[3];
	      $ku_nname = $data[4];

	      echo "<tr><td class=\"selakt\">";
	      ButtonImageMove("editdelete.png", "Loeschen", "kunden.php",
		"ks_num=$ks_num&kg_num=$kg_num&kg_name=" . urlencode($kg_name) .
		"&kg_prnum=$kg_prnum&menu=$menu&headline=$headline&func=DelSammel");
	      echo "</td>\n";
	      echo "<td class=\"sel\">$ku_firma</td>\n";
	      echo "<td class=\"sel\">$ku_nname $ku_vname</td>\n";

	      if ($fixkunde) {
		 $query = "select fx_proz from fixanteil where fx_valid_to is NULL ";
		 $query .= "and fx_kunum = $ks_kunum order by fx_valid_from desc";

		 if (!($resfx = QueryDB($db, $query))) {
		    closeDB($db);
		    return;
		 }

		 if (numrowsDB($resfx) > 0) {
		    $data = fetchDB($resfx, 0);
		    $fx_proz = $data[0];

		    if (!isset($fx_proz))
		       $fx_proz = 0.0;
		 } else
		    $fx_proz = 0.0;

		 if ($sum_proz > 0.0)
		    $real_proz = $fx_proz / $sum_proz * 100.0;
		 else
		    $real_proz = 0.0;

		 echo "<td class=\"selnum\">" . FormatNum($fx_proz, 3) . "</td>\n";
		 echo "<td class=\"selnum\">" . FormatNum($real_proz, 3) . "</td>\n";
		 $sum_ant1 += $fx_proz;
		 $sum_ant2 += $real_proz;
	      }

	      echo "</tr>\n";
	      $j++;
	   }

	   if ($fixkunde) {
	      echo "<tr><td class=\"selnum\" colspan=3><b>Summen:</b></td>\n";
	      echo "<td class=\"selnum\"><b>" . FormatNum($sum_ant1, 3) . "</b></td>\n";
	      echo "<td class=\"selnum\"><b>" . FormatNum($sum_ant2, 3) . "</b></td></tr>\n";
	   }

	   echo "</table>\n</td></tr>\n";
	} else {
	   echo "<tr><td class=\"selakt\" colspan=2>Derzeit existieren noch keine Kunden!<br>";
	   echo "Bitte tragen Sie zuerst unter dem Men&uuml;punkt \"";
	   echo "Verwaltung&minus;&gt;Kunden\" einen oder mehrere Kunden ein.</td></tr>\n";
	   return;
	}
}

# Folgende Funktion gibt eine Maske aus, um den Namen einer Kundengruppe zu
# erfassen, oder zu editieren.
#
function EditKGroup() {
	global $menu;
	global $headline;

	$nav = "menu=$menu&headline=$headline";
	$kg_num = $_REQUEST['kg_num'];
	$kg_name = $_REQUEST['kg_name'];
	$kg_prnum = $_REQUEST['kg_prnum'];

	if (isset($kg_num) && $kg_num > 0)
	   $update = true;
	else
	   $update = false;
?>
<form name="kgroup" action="kunden.php" method="post">
   <input type="hidden" name="menu" value="<? echo "$menu"; ?>">
   <input type="hidden" name="headline" value="<? echo "$headline"; ?>">
   <input type="hidden" name="func" value="SaveKGroup">
   <input type="hidden" name="update" value="<? echo "$update"; ?>">
<?
	if ($update)
	   echo "   <input type=\"hidden\" name=\"kg_num\" value=\"$kg_num\">\n";
?>
<table class="input">
   <tr>
      <th class="sel" colspan=2>
<?
	if ($update)
	   echo "Editieren der Kundengruppe";
	else
	   echo "Neue Kundengruppe";
?>
      </th>
   </tr>
   <tr>
      <td>Gruppenname:</td>
      <td><input type="text" class="inputmust" name="kg_name" value="<? echo "$kg_name"; ?>" size=40 maxlength=60></td>
   </tr>
   <tr>
      <td>Projekt:</td>
      <td><select name="kg_prnum">
             <option value=""></option>
<?
	$db = OpenDB();
	$query = "select distinct pr_num, pr_name from project, plan where ";
	$query .= "pl_prnum = pr_num and pr_status = 0 and pl_status in (2,3,4)";

	if (!($result = QueryDB($db, $query))) {
	   closeDB($db);
	   return;
	}

	$rows = numrowsDB($result);
	$j = 0;

	while ($j < $rows) {
	   $data = fetchDB($result, $j);
	   $pr_num = $data[0];
	   $pr_name = $data[1];

	   if ($update && $kg_prnum == $pr_num)
	      echo "<option value=\"$pr_num\" selected>$pr_num $pr_name</option>\n";
	   else
	      echo "<option value=\"$pr_num\">$pr_num $pr_name</option>\n";

	   $j++;
	}
?>
          </select>
      </td>
   </tr>
<?
	if ($update)
	   AddKunde($db);
?>
</table>
<table class="indent"><tr><td>
<?
	ButtonSubmit("Speichern", "kgroup");
	echo "</td></tr></table>\n</form>\n";
	closeDB($db);
}

# Folgende Funktion speichert den Namen einer neuen Kundengruppe. Anschliessend
# koennen der Gruppe Kunden hinzugefuegt werden.
#
function SaveKGroup() {
	$kg_num = $_REQUEST['kg_num'];
	$kg_name = $_REQUEST['kg_name'];
	$kg_prnum = $_REQUEST['kg_prnum'];
	$update = $_REQUEST['update'];

	if (!isset($kg_name) || strlen($kg_name) <= 0) {
	   Error("Sie m&uuml;ssen unbegingt einen Kundengruppennamen eigeben!");
	   return false;
	}

	if ($update && (!isset($kg_num) || strlen($kg_num) <= 0)) {
	   Error("SaveKGroup: Interner Fehler: Kundengruppennummer fehlt!");
	   return false;
	}

	if (!isset($kg_prnum) || strlen($kg_prnum) <= 0)
	   $kg_prnum = "NULL";

	$db = OpenDB();

	if ($update) {
	   $query = "update kgroup set kg_name = '$kg_name', ";
	   $query .= "kg_prnum = $kg_prnum where kg_num = $kg_num";

	   if (!QueryDB($db, $query)) {
	      closeDB($db);
	      return false;
	   }
	} else {
	   $query = "select co_kgroup from counter";

	   if (!($result = QueryDB($db, $query))) {
	      closeDB($db);
	      return false;
	   }

	   $data = fetchDB($result, 0);
	   $co_kgroup = $data[0] + 1;

	   if (!QueryDB($db, "begin")) {
	      closeDB($db);
	      return false;
	   }

	   $query = "insert into kgroup (kg_num, kg_name, kg_prnum) values ";
	   $query .= "($co_kgroup, '$kg_name', $kg_prnum)";

	   if (!QueryDB($db, $query)) {
	      QueryDB($db, "rollback");
	      closeDB($db);
	      return false;
	   }

	   $query = "update counter set co_kgroup = $co_kgroup";

	   if (!QueryDB($db, $query)) {
	      QueryDB($db, "rollback");
	      closeDB($db);
	      return false;
	   }

	   QueryDB($db, "commit");
	}

	closeDB($db);
	return true;
}

function AddGroupKunde() {
	global $fixkunde;

	$kg_num = $_REQUEST['kg_num'];
	$ku_num = $_REQUEST['ku_num'];

	if (!isset($kg_num) || $kg_num <= 0) {
	   Error("AddGroupKunde: Interner Fehler: Gruppennummer fehlt!");
	   return false;
	}

	if (!isset($ku_num) || $ku_num <= 0) {
	   Error("AddGroupKunde: Interner Fehler: Kundennummer fehlt!");
	   return false;
	}

	$db = OpenDB();
	# Sicherstellen, dass der gewuenschte Kunde nicht bereits in der
	# aktuellen Gruppe vorhanden ist.
	$query = "select count(*) from kgsammel where ks_kgnum = $kg_num and ks_kunum = $ku_num";

	if (!($result = QueryDB($db, $query))) {
	   closeDB($db);
	   return false;
	}

	$data = fetchDB($result, 0);

	if ($data[0] > 0) {
	   Error("Error: Der Kunde ist bereits in der Gruppe enthalten!");
	   closeDB($db);
	   return false;
	}

	# Da der Kunde noch nicht in der Gruppe enthalten ist, fuegen wir
	# ihn nun tatsaechlich in den Kontainer ein.
	$query = "select co_kgsammel from counter";

	if (!($result = QueryDB($db, $query))) {
	   closeDB($db);
	   return false;
	}

	$data = fetchDB($result, 0);
	$co_kgsammel = $data[0] + 1;

	if (!QueryDB($db, "begin")) {
	   closeDB($db);
	   return false;
	}

	$query = "insert into kgsammel (ks_num, ks_kgnum, ks_kunum) values ";
	$query .= "($co_kgsammel, $kg_num, $ku_num)";

	if (!QueryDB($db, $query)) {
	   QueryDB($db, "rollback");
	   closeDB($db);
	   return false;
	}

	$query = "update counter set co_kgsammel = $co_kgsammel";

	if (!QueryDB($db, $query)) {
	   QueryDB($db, "rollback");
	   closeDB($db);
	   return false;
	}

	QueryDB($db, "commit");
	closeDB($db);
	return true;
}

function DelSammel() {
	$kg_num = $_REQUEST['kg_num'];
	$ks_num = $_REQUEST['ks_num'];

	if (!isset($kg_num) || $kg_num <= 0) {
	   Error("DelSammel: Interner Fehler: Kundengruppennummer wurde nicht &uuml;bergeben!");
	   return;
	}

	if (!isset($ks_num) || $ks_num <= 0) {
	   Error("DelSammel: Interner Fehler: Kontainernummer wurde nicht &uuml;bergeben!");
	   return;
	}

	$db = OpenDB();
	$query = "delete from kgsammel where ks_num = $ks_num";

	QueryDB($db, $query);
}

function AskDelKGroup() {
	global $menu;
	global $headline;

	$kg_num = $_REQUEST['kg_num'];

	if (!isset($kg_num) || $kg_num <= 0) {
	   Error("AskDelKunde: Interner Fehler: Kundengruppennummer wurde nicht &uuml;bergeben!");
	   return;
	}

	$nav = "func=DelKGroupReal&kg_num=$kg_num&menu=$menu&headline=$headline";
?>
<br>
<form action="kunden.php" method="post">
<table border=2 class="alarm">
   <tr><td colspan=2><big>Warnung!</big><br><br>
           Wollen Sie diese Kundengruppe wirklich unwiederbringlich
	   l&ouml;schen?
      </td>
   </tr>
   <tr>
      <td><center><input type="button" name="yes" value="Kundengruppe Löschen" onClick="javascript:MoveTo('kunden.php','yes=yes&<? echo "$nav"; ?>')"></center></td>
      <td><center><input type="button" name="no" value="Abbruch" onClick="javascript:MoveTo('kunden.php','no=no&<? echo "$nav"; ?>')"></center></td>
   </tr>
</table>
</form>
<?php
}

function DelKGroup() {
	$kg_num = $_REQUEST['kg_num'];

	if (!isset($kg_num) || $kg_num <= 0) {
	   Error("DelKGroup: Interner Fehler: Kundengruppennummer wurde nicht &uuml;bergeben!");
	   return;
	}

	$db = OpenDB();

	if (!QueryDB($db, "begin")) {
	   closeDB($db);
	   return;
	}
	
	# Loeschen der Sammler
	$query = "delete from kgsammel where ks_kgnum = $kg_num";

	if (!QueryDB($db, $query)) {
	   QueryDB($db, "rollback");
	   closeDB($db);
	   return;
	}

	# Loeschen der Kundengruppe selbst
	$query = "delete from kgroup where kg_num = $kg_num";

	if (!QueryDB($db, $query)) {
	   QueryDB($db, "rollback");
	   closeDB($db);
	   return;
	}

	QueryDB($db, "commit");
	closeDB($db);
}

/*----------------------------------------------------------------------------*/
# Ab hier steht die Steuerung fuer die einzelnen Funktionen.
#
if (isset($knopf) && $knopf == 43)	// Einfache Kundenliste
   ListKunde();

if (isset($knopf) && $knopf == 48)
   ListKGroups();

$func = $_REQUEST['func'];

if (isset($func) && strlen($func) > 0) {
   # Steuerung fuer Einzelkunden
   if ($func == "new")
      EditKunde();

   if ($func == "SaveKunde") {
      if (!SaveKunde())
         EditKunde();
      else
         ListKunde();
   }

   if ($func == "edit")
      EditKunde();

   if ($func == "del")
      AskDelKunde();

   if ($func == "SaveKundeReal") {
      $yes = $_REQUEST['yes'];

      if ($yes == "yes")
         DelKunde();

      ListKunde();
   }

   # Steuerung fuer Kundengruppen
   if ($func == "NewKGroup" || $func == "EditKGroup")
      EditKGroup();

   if ($func == "SaveKGroup") {
      if (!SaveKGroup())
         ListKGroups();

      ListKGroups();
   }

   if ($func == "AddGroupKunde") {
      AddGroupKunde();
      EditKGroup();
   }

   if ($func == "DelSammel") {
      DelSammel();
      EditKGroup();
   }

   if ($func == "DelKGroup")
      AskDelKGroup();

   if ($func == "DelKGroupReal") {
      $yes = $_REQUEST['yes'];

      if ($yes == "yes")
         DelKGroup();

      ListKGroups();
   }
}


require_once('footer.inc');
?>

Return current item: TheoPlan