Subversion Repositories public

Rev

Blame | Last modification | View Log | RSS feed

<?
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');
?>