diff --git a/aloita_synkronointi.php b/aloita_synkronointi.php index 95cb865833..ac47b112d0 100644 --- a/aloita_synkronointi.php +++ b/aloita_synkronointi.php @@ -83,6 +83,11 @@ exit; } + if (synkronoi_tarkista_pakolliset($table) === false) { + echo "VIRHE: synkronoi_ainoastaan virheellinen. Pakolliset kentät on pakko synkronoida!"; + exit; + } + // rakennetaaan kysely, jolla haetaan pakolliset tiedot molemmista yrityksistä // ja groupataan niiden mukaan. tällä haetaan "duplikaatit", eli tieto on jo synkronissa // valittujen yhtiöiden välillä. diff --git a/inc/functions.inc b/inc/functions.inc index 04d91c230c..b053cffad0 100644 --- a/inc/functions.inc +++ b/inc/functions.inc @@ -2521,7 +2521,7 @@ if (!function_exists("synclog")) { // Konserniyhtiöiden tietueiden synkronointi if (!function_exists("synkronoi")) { function synkronoi($yhtio, $table, $tunnus, $orig = "", $force = "") { - global $yhtiorow, $kukarow, $synkronoi_kiellot; + global $yhtiorow, $kukarow, $synkronoi_kiellot, $synkronoi_ainoastaan; // Onko mahdollista synkronoida? if (stripos($yhtiorow["synkronoi"], $table) === false) { @@ -2548,6 +2548,13 @@ if (!function_exists("synkronoi")) { return false; } + if (synkronoi_tarkista_pakolliset($table) === false) { + $synclog .= "VIRHE: synkronoi_ainoastaan virheellinen. Pakolliset kentät on pakko synkronoida!"; + + synclog($yhtio, $table, $synclog, $tunnus); + return false; + } + // Haetaan master $query = "SELECT * FROM $table @@ -2584,14 +2591,22 @@ if (!function_exists("synkronoi")) { if (count($diff) > 0) { foreach ($diff as $key => $value) { - if (is_string($key) and !in_array($key, array("tunnus", "muuttaja", "muutospvm", "laatija", "luontiaika"))) { - if (isset($synkronoi_kiellot[$table]) and in_array($key, $synkronoi_kiellot[$table])) { - // Ohitetaan tämä koska se on synkronoi kielloissa - } - else { - $muutokset[$key] .= $value; - } + // ohitetaan aina vakiokentät + if (in_array($key, array("tunnus", "muuttaja", "muutospvm", "laatija", "luontiaika"))) { + continue; } + + // Ohitetaan tämä koska se on synkronoi kielloissa + if (isset($synkronoi_kiellot[$table]) and in_array($key, $synkronoi_kiellot[$table])) { + continue; + } + + // Ohitetaan jos meillä on asetettuna synkronoi_ainoastaan array, ja kenttä ei löydy sieltä + if (!empty($synkronoi_ainoastaan) and !in_array($key, $synkronoi_ainoastaan[$table])) { + continue; + } + + $muutokset[$key] .= $value; } } @@ -3055,6 +3070,36 @@ if (!function_exists("synkronoi")) { } } +if (!function_exists("synkronoi_tarkista_pakolliset")) { + function synkronoi_tarkista_pakolliset($table) { + global $synkronoi_ainoastaan; + + // jos synkronoi_ainoastaan on tyhjää, homma ok + if (empty($synkronoi_ainoastaan)) { + return true; + } + + require_once "inc/pakolliset_sarakkeet.inc"; + + list($pakolliset, $kielletyt, $wherelliset, $eiyhtiota, $joinattavat, $saakopoistaa, $oletukset, $eisaaollatyhja) = pakolliset_sarakkeet($table); + + // hetaan pakolliset ja wherelliset, mergetään ne arrayt + // pakollisten kenttien nimet pienillä kirjaimilla + $indeksi = array_merge($wherelliset, $pakolliset); + $indeksi = array_unique($indeksi); + $indeksi = array_map('strtolower', $indeksi); + + // synkronoi_ainoastaan, tulee sisältää ainakin kaikki taulun pakolliset sarakkeet + foreach ($indeksi as $key) { + if (!in_array($key, $synkronoi_ainoastaan[$table])) { + return false; + } + } + + return true; + } +} + if (!function_exists("jalkilaskentafunktiolle_ostohinta")) { function jalkilaskentafunktiolle_ostohinta($otunnus, $rivitunnus) { global $yhtiorow, $kukarow; diff --git a/inc/parametrit.inc b/inc/parametrit.inc index 822c349f3d..9c4722ae10 100644 --- a/inc/parametrit.inc +++ b/inc/parametrit.inc @@ -250,6 +250,7 @@ unset($liitetaanko_editilaus_laskulle_hakemisto); unset($siirrasuoritustilille); unset($ohjewiki_url); +unset($synkronoi_ainoastaan); unset($synkronoi_kiellot); unset($alv_laskelman_sallittu_erotus); unset($e3_params); diff --git a/inc/yhtion_parametrittarkista.inc b/inc/yhtion_parametrittarkista.inc index d44cdc7a02..e031f9c840 100644 --- a/inc/yhtion_parametrittarkista.inc +++ b/inc/yhtion_parametrittarkista.inc @@ -178,6 +178,10 @@ if (!function_exists("yhtion_parametrittarkista")) { } $virhe[$i] .= t("Taulu ei kelpaa")." '$taulu' ".t("sallitut taulut ovat")." ".implode(", ", $sallitut); } + + if (synkronoi_tarkista_pakolliset($taulu) === false) { + $virhe[$i] .= "VIRHE: '$taulu' -taulun synkronoi_ainoastaan virheellinen. Pakolliset kentät on pakko synkronoida!"; + } } } }