/**
 * Zusammenlegen der Firmen
 *
 * @param unknown_type $firmendaten
 * @return unknown
 */
function zusammenlegen($firmendaten)
{
    global $db, $user;
    $error = false;
    $firma_id_geloescht = isset($firmendaten['firma_id_geloescht']) ? $firmendaten['firma_id_geloescht'] : '';
    $firma_id_bleibt = isset($firmendaten['firma_id_bleibt']) ? $firmendaten['firma_id_bleibt'] : '';
    $standort = isset($firmendaten['standort']) ? $firmendaten['standort'] : array();
    $kontakt = isset($firmendaten['kontakt']) ? $firmendaten['kontakt'] : array();
    $personfunktionstandort = isset($firmendaten['personfunktionstandort']) ? $firmendaten['personfunktionstandort'] : array();
    $firmaorganisationseinheit = isset($firmendaten['firmaorganisationseinheit']) ? $firmendaten['firmaorganisationseinheit'] : array();
    //Überprüfung auf doppelte Organisationseinheiten
    $firmaorganisationseinheit_check = array();
    for ($i = 0; $i < count($firmaorganisationseinheit); $i++) {
        $firmaorganisationseinheit_obj->result[$i] = new firma();
        if ($firmaorganisationseinheit_obj->result[$i]->load_firmaorganisationseinheit($firmaorganisationseinheit[$i])) {
            if (isset($firmaorganisationseinheit_obj->result[$i])) {
                if (array_key_exists($firmaorganisationseinheit_obj->result[$i]->oe_kurzbz, $firmaorganisationseinheit_check)) {
                    exit("<b style='color:red'>Es wurden Zuordnungen von Organisationseiheiten mehrfach ausgewählt!<br>Bitte Auswahl korrigieren.</b>");
                }
                $firmaorganisationseinheit_check[$firmaorganisationseinheit_obj->result[$i]->oe_kurzbz] = $firmaorganisationseinheit[$i];
            }
        }
    }
    if (!$db->db_query('BEGIN;')) {
        return 'Fehler beim Starten der Transaktion';
    }
    // Ermitteln der Standorte zu den Firmen - geloescht und bleibt. Wichtiger Teil zum ermitteln welche Standorte entfernt werden sollen
    $standorte_vorhanden = array();
    $standort_obj = new standort();
    $standort_obj->result = array();
    if ($standort_obj->load_firma($firma_id_geloescht)) {
        foreach ($standort_obj->result as $key => $val) {
            $standorte_vorhanden[$val->standort_id] = $val->standort_id;
        }
    }
    $standort_obj = new standort();
    $standort_obj->result = array();
    if ($standort_obj->load_firma($firma_id_bleibt)) {
        foreach ($standort_obj->result as $key => $val) {
            $standorte_vorhanden[$val->standort_id] = $val->standort_id;
        }
    }
    $standort_check = array();
    if (is_array($standort) && count($standort)) {
        // Array mit Standort als Key fuer Kontrolle der Adressen ob der Standort noch gueltig ist oder neu zugeordnet wird
        $standort_check = array();
        for ($i = 0; $i < count($standort); $i++) {
            $standort_check[$standort[$i]] = $standort[$i];
            $standorte_vorhanden[$standort[$i]] = 'X';
            $standort_obj = new standort();
            $standort_obj->result = array();
            if ($standort_obj->load($standort[$i])) {
                // Standortwechsel zu anderer Firma
                if ($standort_obj->firma_id != $firma_id_bleibt) {
                    echo '<h5>Wechsel Standort ' . $standort[$i] . ' von Firma ID ' . $standort_obj->firma_id . ' auf => Firma ID ' . $firma_id_bleibt . '</h5>';
                    $standort_obj->new = false;
                    $standort_obj->firma_id = $firma_id_bleibt;
                    if (!$standort_obj->save()) {
                        $error = true;
                        echo 'Standort: ' . $standort_obj->errormsg . '<br>';
                    }
                }
            } else {
                $error = true;
                echo 'Standort: ' . $standort_obj->errormsg;
            }
        }
    }
    // Ende Standort
    if ($error) {
        $db->db_query('ROLLBACK;');
        return false;
    }
    // Pruefen ob Kontakte noch einen alten Standort zugewiessen ist
    $kontakt_check = array();
    $kontakt_ok = array();
    if (is_array($kontakt) && count($kontakt)) {
        foreach ($kontakt as $key => $val) {
            $standort_id = $key;
            // Kontakt wird dem ersten Standort von Firma bleibt zugeordnet
            if (!isset($standort_check[$standort_id]) && isset($standort[0])) {
                $standort_id = $standort[0];
            } elseif (!isset($standort_check[$standort_id])) {
                continue;
            }
            for ($ii = 0; $ii < count($val); $ii++) {
                $kontakt_check[$val[$ii]] = $val[$ii];
                $kontakt_ok[$standort_id][] = $val[$ii];
                if ($standort_id != $key) {
                    echo '<h5>Wechsel Kontakt ' . $val[$ii] . ' von Standort ID ' . $key . ' auf => Standort ID ' . $standort_id . '</h5>';
                } else {
                    continue;
                }
                // Keine Aenderung nechsten Datensatz pruefen
                $qry = "UPDATE public.tbl_kontakt set updateamum= now(),updatevon='" . addslashes($user) . "',standort_id='" . $standort_id . "' WHERE kontakt_id='" . $val[$ii] . "'";
                $db->errormsg = '';
                if (!$db->db_query($qry)) {
                    $error = true;
                    echo 'Fehler beim Aender der Kontaktdaten';
                }
            }
        }
        $kontakt = $kontakt_ok;
        $kontakt_ok = null;
    }
    if ($error) {
        $db->db_query('ROLLBACK;');
        return false;
    }
    // Pruefen ob personfunktionstandorte noch einen alten Standort zugewiessen ist
    $personfunktionstandort_check = array();
    $personfunktionstandort_ok = array();
    if (is_array($personfunktionstandort) && count($personfunktionstandort)) {
        foreach ($personfunktionstandort as $key => $val) {
            $standort_id = $key;
            if (!isset($standort_check[$standort_id]) && isset($standort[0])) {
                $standort_id = $standort[0];
            } elseif (!isset($standort_check[$standort_id])) {
                continue;
            }
            for ($ii = 0; $ii < count($val); $ii++) {
                $personfunktionstandort_check[$val[$ii]] = $val[$ii];
                $personfunktionstandort_ok[$standort_id][] = $val[$ii];
                if ($standort_id != $key) {
                    echo '<h5>Wechsel Personfunktionstandort ' . $val[$ii] . ' von Standort ID ' . $key . ' auf => Standort ID ' . $standort_id . '</h5>';
                } else {
                    continue;
                }
                // Keine Aenderung nechsten Datensatz pruefen
                $qry = "UPDATE public.tbl_personfunktionstandort SET standort_id='" . $standort_id . "' WHERE personfunktionstandort_id='" . $val[$ii] . "'";
                $db->errormsg = '';
                if (!$db->db_query($qry)) {
                    echo 'Fehler beim Aendern der Personenzuordnung';
                    $error = true;
                }
            }
        }
        $personfunktionstandort = $personfunktionstandort_ok;
        $personfunktionstandort_ok = null;
    }
    if ($error) {
        $db->db_query('ROLLBACK;');
        return false;
    }
    // Welche Kontakte werden entfernt
    if (is_array($standorte_vorhanden) && count($standorte_vorhanden)) {
        reset($standorte_vorhanden);
        // Array mit Standort als Key fuer Kontrolle der Adressen ob der Standort noch gueltig ist oder neu zugeordnet wird
        foreach ($standorte_vorhanden as $key => $val) {
            if (!is_numeric($val)) {
                // Kennzeichen ob bereits verarbeitet
                continue;
            }
            $qry = "DELETE FROM public.tbl_kontakt WHERE standort_id='" . $val . "'";
            $db->errormsg = '';
            if (!$db->db_query($qry)) {
                $error = true;
                echo 'Fehler beim Aendern der Kontakte';
            }
            $qry = "DELETE FROM public.tbl_personfunktionstandort WHERE standort_id='" . $val . "'";
            $db->errormsg = '';
            if (!$db->db_query($qry)) {
                $error = true;
                echo 'Fehler beim Aendern der Personenzuordnung';
            }
            $standort_obj = new standort();
            $standort_obj->result = array();
            if (!$standort_obj->load($val)) {
                $error = true;
                echo 'Fehler beim lesen Adresse zum Standort ' . $val . ' ' . $standort_obj->errormsg . '<br>';
            }
            if ($standort_obj->result) {
                foreach ($standort_obj->result as $keys => $vals) {
                    $qry = "DELETE FROM public.tbl_standort WHERE standort_id='" . $val . "'";
                    if (!$db->db_query($qry)) {
                        $error = true;
                        echo 'Fehler beim Aendern des Standorts';
                    }
                    if ($vals->adresse_id != '') {
                        $qry = "DELETE FROM public.tbl_adresse WHERE adresse_id='" . $vals->adresse_id . "'";
                        if (!$db->db_query($qry)) {
                            $error = true;
                            echo 'Fehler beim Aendern der Adresse';
                        }
                    }
                }
            }
        }
    }
    if ($error) {
        $db->db_query('ROLLBACK;');
        return false;
    }
    if (isset($firmaorganisationseinheit) && is_array($firmaorganisationseinheit) && count($firmaorganisationseinheit)) {
        $i = 0;
        foreach ($firmaorganisationseinheit as $key => $firma_organisationseinheit_id) {
            $firmaorganisationseinheit_obj->result[$i] = new firma();
            if (!$firmaorganisationseinheit_obj->result[$i]->load_firmaorganisationseinheit($firma_organisationseinheit_id)) {
                $error = true;
                echo 'Firma - Organisationseinheit: ' . $firmaorganisationseinheit_obj->errormsg . ' (' . $firma_organisationseinheit_id . ')<br>';
            } else {
                if ($firmaorganisationseinheit_obj) {
                    //var_dump($firmaorganisationseinheit_obj);
                    foreach ($firmaorganisationseinheit_obj->result as $keys => $vals) {
                        // Organisation gehoert bereits zu dieser Firma
                        if ($vals->firma_id == $firma_id_bleibt) {
                            continue;
                        }
                        // gibt es die Zuornung der Oe-Einheit zur Firma schon?
                        $qry_check = "SELECT * FROM public.tbl_firma_organisationseinheit WHERE firma_id='" . $firma_id_bleibt . "' AND oe_kurzbz='" . $vals->oe_kurzbz . "';";
                        if ($db->db_num_rows($db->db_query($qry_check)) == 0) {
                            //nein
                            $qry = 'UPDATE public.tbl_firma_organisationseinheit SET ' . 'firma_id=' . addslashes($firma_id_bleibt) . ', ' . 'updateamum= now(), ' . 'updatevon=\'' . addslashes($user) . '\' ' . " WHERE firma_organisationseinheit_id='" . addslashes($vals->firma_organisationseinheit_id) . "';";
                        } else {
                            //ja
                            $qry = 'UPDATE public.tbl_firma_organisationseinheit SET ' . 'bezeichnung=\'' . addslashes($vals->bezeichnung) . '\', ' . 'kundennummer=\'' . addslashes($vals->kundennummer) . '\', ' . 'updateamum= now(), ' . 'updatevon=\'' . addslashes($user) . '\' ' . " WHERE firma_id='" . addslashes($firma_id_bleibt) . "' AND oe_kurzbz='" . $vals->oe_kurzbz . "';";
                        }
                        $db->errormsg = '';
                        if ($result = $db->db_query($qry)) {
                            echo 'Organisation ' . $vals->firma_organisationseinheit_id . ' ' . $vals->name . ', ' . $vals->organisationseinheittyp_kurzbz . ' ' . $vals->bezeichnung . ' zu Firma ' . $firma_id_bleibt . ' zugeordnet ' . '<br>';
                        } else {
                            $error = true;
                            echo "<br>OE: " . $qry . "<br>";
                            echo 'Fehler bein Zuordnen von Organisation ' . $vals->firma_organisationseinheit_id . ' ' . $vals->name . ', ' . $vals->organisationseinheittyp_kurzbz . ' ' . $vals->bezeichnung . ' zu Firma ' . $firma_id_bleibt . '<br>';
                            echo $db->errormsg . "<br>";
                        }
                    }
                }
            }
            $i++;
        }
    }
    // Alle Organisationseinheiten die noch gebunden sind an "wird geloescht Firma" nach dem Zuordnen zu "bleibt Firma" loeschen
    $qry = "DELETE FROM public.tbl_firma_organisationseinheit WHERE firma_id='" . $firma_id_geloescht . "'";
    $db->errormsg = '';
    if (!$db->db_query($qry)) {
        echo 'Fehler beim Loeschen der Organisationseinheiten';
        $error = true;
    }
    //Alle Tags uebernehemen die der neuen Firma noch nicht zugeordnet sind
    $qry = "UPDATE public.tbl_firmatag SET firma_id='{$firma_id_bleibt}' WHERE firma_id='{$firma_id_geloescht}' AND tag NOT IN(SELECT tag FROM public.tbl_firmatag WHERE firma_id='{$firma_id_bleibt}');";
    if (!$db->db_query($qry)) {
        echo 'Fehler beim Uebernehmen der Tags';
        $error = true;
    }
    //Die Restlichen Tags loeschen
    $qry = "DELETE FROM public.tbl_firmatag WHERE firma_id='{$firma_id_geloescht}'";
    if (!$db->db_query($qry)) {
        echo 'Fehler beim Entfernen der Tags';
        $error = true;
    }
    //Projektarbeiten Zuordnungen umhaengen
    $qry = "UPDATE lehre.tbl_projektarbeit SET firma_id='{$firma_id_bleibt}' WHERE firma_id='{$firma_id_geloescht}'";
    if (!$db->db_query($qry)) {
        echo 'Fehler beim Aendern der Projektarbeitszuordnung';
        $error = true;
    }
    //Projektarbeiten Zuordnungen umhaengen
    $qry = "UPDATE public.tbl_adresse SET firma_id='{$firma_id_bleibt}' WHERE firma_id='{$firma_id_geloescht}'";
    if (!$db->db_query($qry)) {
        echo 'Fehler beim Aendern der Adresszuordnung';
        $error = true;
    }
    //Preinteressenten umhaengen
    $qry = "UPDATE public.tbl_preinteressent SET firma_id='{$firma_id_bleibt}' WHERE firma_id='{$firma_id_geloescht}'";
    if (!$db->db_query($qry)) {
        echo 'Fehler beim Aendern der Preinteressentzuordnung';
        $error = true;
    }
    //Projektarbeiten Zuordnungen umhaengen
    $qry = "UPDATE public.tbl_firma SET finanzamt='{$firma_id_bleibt}' WHERE finanzamt='{$firma_id_geloescht}'";
    if (!$db->db_query($qry)) {
        echo 'Fehler beim Aendern der Finanzamtzuordnung';
        $error = true;
    }
    //WaWi Bestellungen umhaengen
    $qry = "UPDATE wawi.tbl_bestellung SET firma_id='{$firma_id_bleibt}' WHERE firma_id='{$firma_id_geloescht}'";
    if (!$db->db_query($qry)) {
        echo 'Fehler beim Aendern der Wawi Bestellung';
        $error = true;
    }
    // Firma loeschen
    $firma = new firma();
    if (!$firma->delete($firma_id_geloescht)) {
        $error = true;
        echo 'Firma loeschen:' . $firma->errormsg;
    }
    if ($error) {
        $db->db_query('ROLLBACK;');
        return false;
    } else {
        $db->db_query('COMMIT;');
        return true;
    }
}
Ejemplo n.º 2
0
 } else {
     $adresse->zustelladresse = true;
     $adresse->heimatadresse = false;
     $adresse->new = true;
     $adresse->insertamum = date('Y-m-d H:i:s');
     $adresse->insertvon = $user;
 }
 $adresse->strasse = $strasse;
 $adresse->plz = $plz;
 $adresse->ort = $ort;
 $adresse->nation = $nation;
 if ($adresse->save()) {
     //Standort anlegen/updaten
     $standort = new standort();
     if ($standort_id != '') {
         $standort->load($standort_id);
         $standort->new = false;
         $standort->insertamum = date('Y-m-d H:i:s');
         $standort->insertvon = $user;
         $standort->new = false;
     } else {
         $standort->insertamum = date('Y-m-d H:i:s');
         $standort->insertvon = $user;
         $standort->new = true;
     }
     $standort->firma_id = $firma->firma_id;
     $standort->adresse_id = $adresse->adresse_id;
     $standort->kurzbz = mb_substr($firma->name, 0, 16);
     if ($standort->save()) {
         //Kontaktdaten anlegen/updaten
         if ($fax != '') {