/**
  * Metodi, joka tallentaa muokatun kokonaisuuden tiedot tietokantaan.
  * Palauttaa arvon Malliluokkapohja::$VIRHE, jos tallennus epäonnistuu,
  * muuten arvon Malliluokkapohja::$OPERAATIO_ONNISTUI.
  *
  * Ajaa Malliluokkapohjan vastaavan metodin yli.
  * 
  * Seuraavat arvot asetetaan täällä automaattisesti, joten niistä ei
  * tarvitse muualla huolehtia: 
  * 
  *   ed_muutos_sek
  * 
  * luomishetki_sek-arvoa ei ole syytä muuttaa, vaikka sitä ei estetä täällä.  
  * 
  * Huolehtii myös isikokonaisuuksien on_lapsia-arvojen päivittämisestä silloin, kun
  * isikokonaisuutta vaihdetaan. Tällöin sekä uuden että vanhan isi-
  * kokonaisuuden on_lapsia-arvot tarkistetaan ja päivitetään.
  * 
  * @return int Palauttaa normaalin Malliluokkapohja::$VIRHE tai 
  * Malliluokkapohja::$OPERAATIO_ONNISTUI -arvon.
  * */
 function tallenna_muutokset()
 {
     $this->set_arvo(time(), Kokonaisuusolio::$sarakenimi_ed_muutos_sek);
     // Haetaan tietokannassa olevan olion ylakokonaisuuden_id, koska tämän
     // olion arvoja on jo saatettu muuttaa:
     $vanha = new Kokonaisuusolio($this->get_id(), $this->tietokantaolio);
     $ylakokonaisuuden_id_vanha = $vanha->getYlakokonaisuuden_id();
     $tallennus = parent::tallenna_muutokset();
     if ($tallennus === Malliluokkapohja::$OPERAATIO_ONNISTUI) {
         // Päivitetään on_lapsia, jos kokonaisuus on linkitetty johonkin muuhun:
         $ylakokonaisuuden_id = $this->getYlakokonaisuuden_id();
         if ($ylakokonaisuuden_id != $ylakokonaisuuden_id_vanha) {
             // Jos uusi yläkokonaisuus on olemassaolevan kokonaisuus,
             // varmistetaan, että sillä on lapsia.
             if ($ylakokonaisuuden_id > 0) {
                 $ylakok = new Kokonaisuusolio($ylakokonaisuuden_id, $this->tietokantaolio);
                 if ($ylakok->olio_loytyi_tietokannasta) {
                     $on_lapsia = 1;
                     $onnistuminen = $ylakok->tallenna_on_lapsia_muutos_kokon($on_lapsia);
                     if ($onnistuminen === Kokonaisuusolio::$VIRHE) {
                         $this->lisaa_virheilmoitus(Tekstit::$virheilm_kokon_muutostallennus_lapsimuutos_eiok);
                     }
                 } else {
                     $this->lisaa_virheilmoitus(Tekstit::$ilm_kokon_ei_loytynyt);
                 }
             }
             // Mahdollinen entinen yläkokonaisuus pitää myös tarkistaa, onko
             // sillä vielä lapsia vai ei.  Mutta vain jos id > 0, koska
             // muuten kokonaisuudella ei ennen ollut yläkokonaisuuksia.
             if ($ylakokonaisuuden_id_vanha > 0) {
                 $ylakok_vanha = new Kokonaisuusolio($ylakokonaisuuden_id_vanha, $this->tietokantaolio);
                 if ($ylakok_vanha->olio_loytyi_tietokannasta) {
                     if ($ylakok_vanha->on_lapsia_kokon()) {
                         $on_lapsia = 1;
                     } else {
                         $on_lapsia = 0;
                     }
                     $onnistuminen = $ylakok_vanha->tallenna_on_lapsia_muutos_kokon($on_lapsia);
                     if ($onnistuminen === Kokonaisuusolio::$VIRHE) {
                         $this->lisaa_virheilmoitus(Tekstit::$virheilm_kokon_muutostallennus_lapsimuutos_eiok);
                     }
                 } else {
                     $this->lisaa_virheilmoitus(Tekstit::$ilm_kokon_ei_loytynyt);
                 }
             }
         }
     }
     return $tallennus;
 }