42define(
'ALLOWED_IF_UPGRADE_UNLOCK_FOUND', 1);
43include_once
'inc.php';
49if (!file_exists($conffile)) {
50 print
'Error: Dolibarr config file was not found. This may means that Dolibarr is not installed yet. Please call the page "/install/index.php" instead of "/install/upgrade.php").';
52require_once $conffile;
53require_once $dolibarr_main_document_root.
'/compta/facture/class/facture.class.php';
54require_once $dolibarr_main_document_root.
'/comm/propal/class/propal.class.php';
55require_once $dolibarr_main_document_root.
'/contrat/class/contrat.class.php';
56require_once $dolibarr_main_document_root.
'/commande/class/commande.class.php';
57require_once $dolibarr_main_document_root.
'/fourn/class/fournisseur.commande.class.php';
58require_once $dolibarr_main_document_root.
'/core/lib/price.lib.php';
59require_once $dolibarr_main_document_root.
'/core/class/menubase.class.php';
60require_once $dolibarr_main_document_root.
'/core/lib/files.lib.php';
75$err = error_reporting();
78 @set_time_limit((
int) $conf->global->MAIN_OVERRIDE_TIME_LIMIT);
84$setuplang =
GETPOST(
"selectlang",
'aZ09', 3) ?
GETPOST(
"selectlang",
'aZ09', 3) :
'auto';
85$langs->setDefaultLang($setuplang);
86$versionfrom =
GETPOST(
"versionfrom",
'alpha', 3) ?
GETPOST(
"versionfrom",
'alpha', 3) : (empty($argv[1]) ?
'' : $argv[1]);
87$versionto =
GETPOST(
"versionto",
'alpha', 3) ?
GETPOST(
"versionto",
'alpha', 3) : (empty($argv[2]) ?
'' : $argv[2]);
88$enablemodules =
GETPOST(
"enablemodules",
'alpha', 3) ?
GETPOST(
"enablemodules",
'alpha', 3) : (empty($argv[3]) ?
'' : $argv[3]);
90$langs->loadLangs(array(
"admin",
"install",
"bills",
"suppliers"));
92if ($dolibarr_main_db_type ==
'mysqli') {
95if ($dolibarr_main_db_type ==
'pgsql') {
98if ($dolibarr_main_db_type ==
'mssql') {
103dolibarr_install_syslog(
"--- upgrade2: entering upgrade2.php page ".$versionfrom.
" ".$versionto.
" ".$enablemodules);
104if (!is_object($conf)) {
114if ((!$versionfrom || preg_match(
'/version/', $versionfrom)) && (!$versionto || preg_match(
'/version/', $versionto))) {
115 print
'Error: Parameter versionfrom or versionto missing or having a bad format.'.
"\n";
116 print
'Upgrade must be ran from command line with parameters or called from page install/index.php (like a first install)'.
"\n";
118 $sapi_type = php_sapi_name();
119 $script_file = basename(__FILE__);
121 if (substr($sapi_type, 0, 3) ==
'cli') {
122 print
'Syntax from command line: '.$script_file.
" x.y.z a.b.c [MAIN_MODULE_NAME1_TO_ENABLE,MAIN_MODULE_NAME2_TO_ENABLE...]\n";
127pHeader(
'',
'step5',
GETPOST(
'action',
'aZ09') ?
GETPOST(
'action',
'aZ09') :
'upgrade',
'versionfrom='.$versionfrom.
'&versionto='.$versionto,
'',
'main-inside main-inside-borderbottom');
130if (!
GETPOST(
'action',
'aZ09') || preg_match(
'/upgrade/i',
GETPOST(
'action',
'aZ09'))) {
131 print
'<h3><img class="valignmiddle inline-block paddingright" src="../theme/common/octicons/build/svg/database.svg" width="20" alt="Database"> ';
132 print
'<span class="inline-block">'.$langs->trans(
'DataMigration').
'</span></h3>';
134 print
'<table border="0" width="100%">';
137 if ((!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) || !empty($dolibarr_main_db_encrypted_pass)) {
138 require_once $dolibarr_main_document_root.
'/core/lib/security.lib.php';
139 if (!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) {
140 $dolibarr_main_db_pass = preg_replace(
'/crypted:/i',
'', $dolibarr_main_db_pass);
141 $dolibarr_main_db_pass =
dol_decode($dolibarr_main_db_pass);
142 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
144 $dolibarr_main_db_pass =
dol_decode($dolibarr_main_db_encrypted_pass);
149 $conf->db->type = $dolibarr_main_db_type;
150 $conf->db->host = $dolibarr_main_db_host;
151 $conf->db->port = $dolibarr_main_db_port;
152 $conf->db->name = $dolibarr_main_db_name;
153 $conf->db->user = $dolibarr_main_db_user;
154 $conf->db->pass = $dolibarr_main_db_pass;
156 $db =
getDoliDBInstance($conf->db->type, $conf->db->host, $conf->db->user, $conf->db->pass, $conf->db->name, (
int) $conf->db->port);
158 if (!$db->connected) {
159 print
'<tr><td colspan="4">'.$langs->trans(
"ErrorFailedToConnectToDatabase", $conf->db->name).
'</td><td class="right">'.$langs->trans(
'Error').
'</td></tr>';
160 dolibarr_install_syslog(
'upgrade2: failed to connect to database :'.$conf->db->name.
' on '.$conf->db->host.
' for user '.$conf->db->user, LOG_ERR);
165 if ($db->database_selected) {
172 if (empty($dolibarr_main_db_encryption)) {
173 $dolibarr_main_db_encryption = 0;
175 $conf->db->dolibarr_main_db_encryption = $dolibarr_main_db_encryption;
176 if (empty($dolibarr_main_db_cryptkey)) {
177 $dolibarr_main_db_cryptkey =
'';
179 $conf->db->dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey;
182 $conf->setValues($db);
185 $listofentities = array(1);
188 include_once DOL_DOCUMENT_ROOT.
'/core/class/hookmanager.class.php';
190 $hookmanager->initHooks(array(
'upgrade2'));
192 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto);
195 $reshook = $hookmanager->executeHooks(
'doUpgradeBefore', $parameters, $object, $action);
196 if ($reshook >= 0 && is_array($hookmanager->resArray)) {
198 $listofentities = array_unique(array_merge($listofentities, $hookmanager->resArray));
209 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN birth date';
211 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemployment date';
213 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemploymentend date';
215 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_range integer';
217 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_c_exp_tax_cat integer';
219 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN langs varchar(24)';
221 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fieldcomputed text';
223 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fielddefault varchar(255)';
225 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
"extrafields ADD COLUMN enabled varchar(255) DEFAULT '1'";
227 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN help text';
229 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user_rights ADD COLUMN entity integer DEFAULT 1 NOT NULL';
235 foreach ($listofentities as $entity) {
236 dol_syslog(
"Process upgrade2 for entity ".$entity);
239 $conf->setEntityValues($db, $entity);
242 if (defined(
'SYSLOG_FILE')) {
243 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
245 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
248 if (count($listofentities) > 1) {
249 print
'<tr><td colspan="4">*** '.$langs->trans(
"Entity").
' '.$entity.
'</td></tr>'.
"\n";
254 $dolibarrlastupgradeversionarray = preg_split(
'/[\.-]/', isset($conf->global->MAIN_VERSION_LAST_UPGRADE) ? $conf->global->MAIN_VERSION_LAST_UPGRADE : (isset($conf->global->MAIN_VERSION_LAST_INSTALL) ? $conf->global->MAIN_VERSION_LAST_INSTALL :
''));
260 $versiontoarray = explode(
'.', $versionto);
261 $versionranarray = explode(
'.', DOL_VERSION);
263 $afterversionarray = explode(
'.',
'2.0.0');
264 $beforeversionarray = explode(
'.',
'2.7.9');
266 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
327 $afterversionarray = explode(
'.',
'2.7.9');
328 $beforeversionarray = explode(
'.',
'2.8.9');
331 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
355 $afterversionarray = explode(
'.',
'2.8.9');
356 $beforeversionarray = explode(
'.',
'2.9.9');
358 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
370 $afterversionarray = explode(
'.',
'2.9.9');
371 $beforeversionarray = explode(
'.',
'3.0.9');
377 $afterversionarray = explode(
'.',
'3.0.9');
378 $beforeversionarray = explode(
'.',
'3.1.9');
380 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
388 $afterversionarray = explode(
'.',
'3.1.9');
389 $beforeversionarray = explode(
'.',
'3.2.9');
391 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
401 $afterversionarray = explode(
'.',
'3.2.9');
402 $beforeversionarray = explode(
'.',
'3.3.9');
404 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
413 $afterversionarray = explode(
'.',
'3.6.9');
414 $beforeversionarray = explode(
'.',
'3.7.9');
416 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
422 $afterversionarray = explode(
'.',
'3.7.9');
423 $beforeversionarray = explode(
'.',
'3.8.9');
429 $afterversionarray = explode(
'.',
'3.9.9');
430 $beforeversionarray = explode(
'.',
'4.0.9');
432 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
438 $afterversionarray = explode(
'.',
'4.0.9');
439 $beforeversionarray = explode(
'.',
'5.0.9');
441 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
451 $afterversionarray = explode(
'.',
'5.0.9');
452 $beforeversionarray = explode(
'.',
'6.0.9');
454 if (isModEnabled(
'multicompany')) {
455 global $multicompany_transverse_mode;
458 if (empty($multicompany_transverse_mode)) {
459 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
471 $afterversionarray = explode(
'.',
'6.0.9');
472 $beforeversionarray = explode(
'.',
'7.0.9');
474 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
483 $afterversionarray = explode(
'.',
'7.0.9');
484 $beforeversionarray = explode(
'.',
'8.0.9');
486 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
492 $afterversionarray = explode(
'.',
'8.0.9');
493 $beforeversionarray = explode(
'.',
'9.0.9');
499 $afterversionarray = explode(
'.',
'10.0.9');
500 $beforeversionarray = explode(
'.',
'11.0.9');
502 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
511 $afterversionarray = explode(
'.',
'13.0.9');
512 $beforeversionarray = explode(
'.',
'14.0.9');
514 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
521 $afterversionarray = explode(
'.',
'15.0.9');
522 $beforeversionarray = explode(
'.',
'16.0.9');
524 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
531 $afterversionarray = explode(
'.',
'16.0.9');
532 $beforeversionarray = explode(
'.',
'17.0.9');
534 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
540 $afterversionarray = explode(
'.',
'17.0.9');
541 $beforeversionarray = explode(
'.',
'18.0.9');
543 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
560 dol_syslog(
"Run migrate_... if migration is LAST ONE");
563 $listofmodule = array(
564 'MAIN_MODULE_ACCOUNTING'=>
'newboxdefonly',
565 'MAIN_MODULE_AGENDA'=>
'newboxdefonly',
566 'MAIN_MODULE_BOM'=>
'menuonly',
567 'MAIN_MODULE_BANQUE'=>
'menuonly',
568 'MAIN_MODULE_BARCODE'=>
'newboxdefonly',
569 'MAIN_MODULE_CRON'=>
'newboxdefonly',
570 'MAIN_MODULE_COMMANDE'=>
'newboxdefonly',
571 'MAIN_MODULE_BLOCKEDLOG'=>
'noboxes',
572 'MAIN_MODULE_DEPLACEMENT'=>
'newboxdefonly',
573 'MAIN_MODULE_DON'=>
'newboxdefonly',
574 'MAIN_MODULE_ECM'=>
'newboxdefonly',
575 'MAIN_MODULE_EXTERNALSITE'=>
'newboxdefonly',
576 'MAIN_MODULE_EXPENSEREPORT'=>
'newboxdefonly',
577 'MAIN_MODULE_FACTURE'=>
'newboxdefonly',
578 'MAIN_MODULE_FOURNISSEUR'=>
'newboxdefonly',
579 'MAIN_MODULE_FICHEINTER'=>
'newboxdefonly',
580 'MAIN_MODULE_HOLIDAY'=>
'newboxdefonly',
581 'MAIN_MODULE_MARGIN'=>
'menuonly',
582 'MAIN_MODULE_MRP'=>
'menuonly',
583 'MAIN_MODULE_OPENSURVEY'=>
'newboxdefonly',
584 'MAIN_MODULE_PAYBOX'=>
'newboxdefonly',
585 'MAIN_MODULE_PRINTING'=>
'newboxdefonly',
586 'MAIN_MODULE_PRODUIT'=>
'newboxdefonly',
587 'MAIN_MODULE_RECRUITMENT'=>
'menuonly',
588 'MAIN_MODULE_RESOURCE'=>
'noboxes',
589 'MAIN_MODULE_SALARIES'=>
'newboxdefonly',
590 'MAIN_MODULE_SERVICE'=>
'newboxdefonly',
591 'MAIN_MODULE_SYSLOG'=>
'newboxdefonly',
592 'MAIN_MODULE_SOCIETE'=>
'newboxdefonly',
593 'MAIN_MODULE_STRIPE'=>
'menuonly',
594 'MAIN_MODULE_TICKET'=>
'newboxdefonly',
595 'MAIN_MODULE_TAKEPOS'=>
'newboxdefonly',
596 'MAIN_MODULE_USER'=>
'newboxdefonly',
597 'MAIN_MODULE_VARIANTS'=>
'newboxdefonly',
598 'MAIN_MODULE_WEBSITE'=>
'newboxdefonly',
615 if (!$error && $enablemodules) {
617 $listofmodules = array();
618 $enablemodules = preg_replace(
'/enablemodules=/',
'', $enablemodules);
619 $tmplistofmodules = explode(
',', $enablemodules);
620 foreach ($tmplistofmodules as $value) {
621 $listofmodules[$value] =
'forceactivate';
625 if ($resultreloadmodules < 0) {
633 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf'=>$conf);
636 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterDB', $parameters, $object, $action);
637 if ($hookmanager->resNbOfHooks > 0) {
639 print
'<tr><td colspan="4">';
640 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
641 print $hookmanager->error;
642 print
"<!-- (".$reshook.
") -->";
645 print
'<tr class="trforrunsql"><td colspan="4">';
646 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (DB)</b>: <span class="ok">OK</span>';
647 print
"<!-- (".$reshook.
") -->";
652 if (!empty($conf->modules_parts[
'hooks'])) {
653 print
'<tr class="trforrunsql"><td colspan="4">';
654 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterDB");
665 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"const SET VALUE = 'torefresh' WHERE name = 'MAIN_FIRST_PING_OK_ID'";
680 foreach ($listofentities as $entity) {
682 $conf->setEntityValues($db, $entity);
684 if (defined(
'SYSLOG_FILE')) {
685 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
687 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
691 $srcroot = DOL_DOCUMENT_ROOT.
'/install/medias';
692 $destroot = DOL_DATA_ROOT.
'/medias';
705 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf'=>$conf);
708 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterFiles', $parameters, $object, $action);
709 if ($hookmanager->resNbOfHooks > 0) {
711 print
'<tr><td colspan="4">';
712 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
713 print $hookmanager->error;
714 print
"<!-- (".$reshook.
") -->";
717 print
'<tr class="trforrunsql"><td colspan="4">';
718 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (Files)</b>: <span class="ok">OK</span>';
719 print
"<!-- (".$reshook.
") -->";
724 if (!empty($conf->modules_parts[
'hooks'])) {
725 print
'<tr class="trforrunsql"><td colspan="4">';
726 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterFiles");
736 print
'<table width="100%">';
737 print
'<tr><td style="width: 30%">'.$langs->trans(
"MigrationFinished").
'</td>';
738 print
'<td class="right">';
742 print
'<span class="error">'.$langs->trans(
"Error").
'</span> - ';
746 print
'<script type="text/javascript">
747 jQuery(document).ready(function() {
748 function init_trrunsql()
750 console.log("toggle .trforrunsql");
751 jQuery(".trforrunsql").toggle();
754 jQuery(".trforrunsqlshowhide").click(function() {
759 print
'<a class="trforrunsqlshowhide" href="#">'.$langs->trans(
"ShowHideDetails").
'</a>';
762 print
'</td></tr>'.
"\n";
768 print
'<div class="error">'.$langs->trans(
'ErrorWrongParameters').
'</div>';
773if ($error && isset($argv[1])) {
779pFooter($error ? 2 : 0, $setuplang);
802 print
'<tr><td colspan="4">';
805 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
807 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
808 $obj = $db->fetch_object($result);
810 $sql =
"SELECT p.rowid, p.fk_facture, p.amount";
811 $sql .=
" FROM ".MAIN_DB_PREFIX.
"paiement as p";
812 $sql .=
" WHERE p.fk_facture > 0";
814 $resql = $db->query($sql);
820 $num = $db->num_rows($resql);
823 $obj = $db->fetch_object($resql);
824 $row[$i][0] = $obj->rowid;
825 $row[$i][1] = $obj->fk_facture;
826 $row[$i][2] = $obj->amount;
834 print $langs->trans(
'MigrationPaymentsNumberToUpdate', $num).
"<br>\n";
838 for ($i = 0; $i < $num; $i++) {
839 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
840 $sql .=
" VALUES (".((int) $row[$i][1]).
",".((int) $row[$i][0]).
",".((float) $row[$i][2]).
")";
842 $res += $db->query($sql);
844 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET fk_facture = 0 WHERE rowid = ".((int) $row[$i][0]);
846 $res += $db->query($sql);
848 print $langs->trans(
'MigrationProcessPaymentUpdate', $row[$i][0]).
"<br>\n";
852 if ($res == (2 * count($row))) {
854 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
857 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
860 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
863 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
881 print
'<tr><td colspan="4">';
884 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
886 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
887 $obj = $db->fetch_object($result);
890 $sql =
"SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
891 $sql .=
" bu2.url_id as socid";
892 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
893 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
894 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')";
895 $sql .=
" WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid";
896 $sql .=
" AND b.rappro = 1";
897 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
899 $resql = $db->query($sql);
905 $num = $db->num_rows($resql);
908 $obj = $db->fetch_object($resql);
909 if ($obj->pamount == $obj->bamount && $obj->socid) {
910 $row[$j][
'paymentid'] = $obj->rowid;
911 $row[$j][
'pamount'] = $obj->pamount;
912 $row[$j][
'fk_bank'] = $obj->fk_bank;
913 $row[$j][
'bamount'] = $obj->bamount;
914 $row[$j][
'socid'] = $obj->socid;
915 $row[$j][
'datec'] = $obj->datec;
925 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 1).
': '.count($row).
"<br>\n";
930 for ($i = 0; $i < $num; $i++) {
932 print
'* '.$row[$i][
'datec'].
' paymentid='.$row[$i][
'paymentid'].
' pamount='.$row[$i][
'pamount'].
' fk_bank='.$row[$i][
'fk_bank'].
' bamount='.$row[$i][
'bamount'].
' socid='.$row[$i][
'socid'].
'<br>';
936 $sql =
" SELECT distinct f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
937 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
938 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
939 $sql .=
" AND pf.fk_facture IS NULL";
940 $sql .=
" ORDER BY f.fk_statut";
942 $resql = $db->query($sql);
944 $num = $db->num_rows($resql);
947 $obj = $db->fetch_object($resql);
948 $facid = $obj->rowid;
950 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
951 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
953 $res += $db->query($sql);
955 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
963 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
965 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
970 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
973 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
991 print
'<tr><td colspan="4">';
994 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
996 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
997 $obj = $db->fetch_object($result);
1000 $sql =
"SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1001 $sql .=
" bu2.url_id as socid";
1002 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1003 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1004 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')";
1005 $sql .=
" WHERE pf.rowid IS NULL AND (p.fk_bank = bu.fk_bank AND bu.type = 'payment') AND bu.fk_bank = b.rowid";
1006 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1008 $resql = $db->query($sql);
1014 $num = $db->num_rows($resql);
1017 $obj = $db->fetch_object($resql);
1018 if ($obj->pamount == $obj->bamount && $obj->socid) {
1019 $row[$j][
'paymentid'] = $obj->rowid;
1020 $row[$j][
'pamount'] = $obj->pamount;
1021 $row[$j][
'fk_bank'] = $obj->fk_bank;
1022 $row[$j][
'bamount'] = $obj->bamount;
1023 $row[$j][
'socid'] = $obj->socid;
1024 $row[$j][
'datec'] = $obj->datec;
1037 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 2).
': '.count($row).
"<br>\n";
1041 for ($i = 0; $i < $num; $i++) {
1043 print
'* '.$row[$i][
'datec'].
' paymentid='.$row[$i][
'paymentid'].
' pamount='.$row[$i][
'pamount'].
' fk_bank='.$row[$i][
'fk_bank'].
' '.$row[$i][
'bamount'].
' socid='.$row[$i][
'socid'].
'<br>';
1047 $sql =
" SELECT distinct f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1048 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1049 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1050 $sql .=
" AND pf.fk_facture IS NULL";
1051 $sql .=
" ORDER BY f.fk_statut";
1053 $resql = $db->query($sql);
1055 $num = $db->num_rows($resql);
1058 $obj = $db->fetch_object($resql);
1059 $facid = $obj->rowid;
1061 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1062 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1064 $res += $db->query($sql);
1066 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1075 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1077 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1082 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1088 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiement DROP COLUMN fk_facture";
1098 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1115 print
'<tr><td colspan="4">';
1120 print
'<b>'.$langs->trans(
'MigrationContractsUpdate').
"</b><br>\n";
1122 $sql =
"SELECT c.rowid as cref, c.date_contrat, c.statut, c.fk_product, c.fk_facture, c.fk_user_author,";
1123 $sql .=
" p.ref, p.label, p.description, p.price, p.tva_tx, p.duration, cd.rowid";
1124 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c";
1125 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p";
1126 $sql .=
" ON c.fk_product = p.rowid";
1127 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"contratdet as cd";
1128 $sql .=
" ON c.rowid=cd.fk_contrat";
1129 $sql .=
" WHERE cd.rowid IS NULL AND p.rowid IS NOT NULL";
1130 $resql = $db->query($sql);
1136 $num = $db->num_rows($resql);
1139 print $langs->trans(
'MigrationContractsNumberToUpdate', $num).
"<br>\n";
1143 $obj = $db->fetch_object($resql);
1145 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"contratdet (";
1146 $sql .=
"fk_contrat, fk_product, statut, label, description,";
1147 $sql .=
"date_ouverture_prevue, date_ouverture, date_fin_validite, tva_tx, qty,";
1148 $sql .=
"subprice, price_ht, fk_user_author, fk_user_ouverture)";
1149 $sql .=
" VALUES (";
1150 $sql .= ((int) $obj->cref).
", ".($obj->fk_product ? ((int) $obj->fk_product) : 0).
", ";
1152 $sql .=
"'".$db->escape($obj->label).
"', null, ";
1153 $sql .= ($obj->date_contrat ?
"'".$db->idate($db->jdate($obj->date_contrat)).
"'" :
"null").
", ";
1156 $sql .= ((float) $obj->tva_tx).
", 1, ";
1157 $sql .= ((float) $obj->price).
", ".((float) $obj->price).
", ".((int) $obj->fk_user_author).
",";
1161 if ($db->query($sql)) {
1162 print $langs->trans(
'MigrationContractsLineCreation', $obj->cref).
"<br>\n";
1174 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1177 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1180 print $langs->trans(
'MigrationContractsNothingToUpdate').
"<br>\n";
1183 print $langs->trans(
'MigrationContractsFieldDontExist').
"<br>\n";
1200 print
'<tr><td colspan="4">';
1205 print
'<b>'.$langs->trans(
'MigrationBankTransfertsUpdate').
"</b><br>\n";
1207 $sql =
"SELECT ba.rowid as barowid, bb.rowid as bbrowid";
1208 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as bb, ".MAIN_DB_PREFIX.
"bank as ba";
1209 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu ON bu.fk_bank = ba.rowid";
1210 $sql .=
" WHERE ba.amount = -bb.amount AND ba.fk_account <> bb.fk_account";
1211 $sql .=
" AND ba.datev = bb.datev AND ba.datec = bb.datec";
1212 $sql .=
" AND bu.fk_bank IS NULL";
1213 $resql = $db->query($sql);
1219 $num = $db->num_rows($resql);
1222 print $langs->trans(
'MigrationBankTransfertsToUpdate', $num).
"<br>\n";
1226 $obj = $db->fetch_object($resql);
1228 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"bank_url (";
1229 $sql .=
"fk_bank, url_id, url, label, type";
1231 $sql .=
" VALUES (";
1232 $sql .= $obj->barowid.
",".$obj->bbrowid.
", '/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'";
1238 if (!$db->query($sql)) {
1249 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1252 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1255 print $langs->trans(
'MigrationBankTransfertsNothingToUpdate').
"<br>\n";
1274 print
'<tr><td colspan="4">';
1277 print
'<b>'.$langs->trans(
'MigrationContractsEmptyDatesUpdate').
"</b><br>\n";
1279 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set date_contrat=tms where date_contrat is null";
1281 $resql = $db->query($sql);
1285 if ($db->affected_rows($resql) > 0) {
1286 print $langs->trans(
'MigrationContractsEmptyDatesUpdateSuccess').
"<br>\n";
1288 print $langs->trans(
'MigrationContractsEmptyDatesNothingToUpdate').
"<br>\n";
1291 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=tms where datec is null";
1293 $resql = $db->query($sql);
1297 if ($db->affected_rows($resql) > 0) {
1298 print $langs->trans(
'MigrationContractsEmptyCreationDatesUpdateSuccess').
"<br>\n";
1300 print $langs->trans(
'MigrationContractsEmptyCreationDatesNothingToUpdate').
"<br>\n";
1316 print
'<tr><td colspan="4">';
1321 print
'<b>'.$langs->trans(
'MigrationContractsInvalidDatesUpdate').
"</b><br>\n";
1323 $sql =
"SELECT c.rowid as cref, c.datec, c.date_contrat, MIN(cd.date_ouverture) as datemin";
1324 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c,";
1325 $sql .=
" ".MAIN_DB_PREFIX.
"contratdet as cd";
1326 $sql .=
" WHERE c.rowid=cd.fk_contrat AND cd.date_ouverture IS NOT NULL";
1327 $sql .=
" GROUP BY c.rowid, c.date_contrat";
1328 $resql = $db->query($sql);
1334 $num = $db->num_rows($resql);
1337 $nbcontratsmodifie = 0;
1341 $obj = $db->fetch_object($resql);
1342 if ($obj->date_contrat > $obj->datemin) {
1343 $datemin = $db->jdate($obj->datemin);
1345 print $langs->trans(
'MigrationContractsInvalidDateFix', $obj->cref, $obj->date_contrat, $obj->datemin).
"<br>\n";
1346 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1347 $sql .=
" SET date_contrat='".$db->idate($datemin).
"'";
1348 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1349 $resql2 = $db->query($sql);
1354 $nbcontratsmodifie++;
1361 if ($nbcontratsmodifie) {
1362 print $langs->trans(
'MigrationContractsInvalidDatesNumber', $nbcontratsmodifie).
"<br>\n";
1364 print $langs->trans(
'MigrationContractsInvalidDatesNothingToUpdate').
"<br>\n";
1384 print
'<tr><td colspan="4">';
1387 print
'<b>'.$langs->trans(
'MigrationContractsIncoherentCreationDateUpdate').
"</b><br>\n";
1389 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=date_contrat where datec is null or datec > date_contrat";
1391 $resql = $db->query($sql);
1395 if ($db->affected_rows($resql) > 0) {
1396 print $langs->trans(
'MigrationContractsIncoherentCreationDateUpdateSuccess').
"<br>\n";
1398 print $langs->trans(
'MigrationContractsIncoherentCreationDateNothingToUpdate').
"<br>\n";
1414 print
'<tr><td colspan="4">';
1417 print
'<b>'.$langs->trans(
'MigrationReopeningContracts').
"</b><br>\n";
1419 $sql =
"SELECT c.rowid as cref FROM ".MAIN_DB_PREFIX.
"contrat as c, ".MAIN_DB_PREFIX.
"contratdet as cd";
1420 $sql .=
" WHERE cd.statut = 4 AND c.statut=2 AND c.rowid=cd.fk_contrat";
1422 $resql = $db->query($sql);
1426 if ($db->affected_rows($resql) > 0) {
1429 $num = $db->num_rows($resql);
1432 $nbcontratsmodifie = 0;
1436 $obj = $db->fetch_object($resql);
1438 print $langs->trans(
'MigrationReopenThisContract', $obj->cref).
"<br>\n";
1439 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1440 $sql .=
" SET statut = 1";
1441 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1442 $resql2 = $db->query($sql);
1447 $nbcontratsmodifie++;
1454 if ($nbcontratsmodifie) {
1455 print $langs->trans(
'MigrationReopenedContractsNumber', $nbcontratsmodifie).
"<br>\n";
1457 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1461 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1479 print
'<tr><td colspan="4">';
1481 print
'<b>'.$langs->trans(
'SuppliersInvoices').
"</b><br>\n";
1484 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiementfourn",
"fk_facture_fourn");
1485 $obj = $db->fetch_object($result);
1490 $select_sql =
'SELECT rowid, fk_facture_fourn, amount';
1491 $select_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn';
1492 $select_sql .=
' WHERE fk_facture_fourn IS NOT NULL';
1495 $select_resql = $db->query($select_sql);
1496 if ($select_resql) {
1497 $select_num = $db->num_rows($select_resql);
1501 while (($i < $select_num) && (!$error)) {
1502 $select_obj = $db->fetch_object($select_resql);
1505 $check_sql =
'SELECT fk_paiementfourn, fk_facturefourn';
1506 $check_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn';
1507 $check_sql .=
' WHERE fk_paiementfourn = '.((int) $select_obj->rowid).
' AND fk_facturefourn = '.((int) $select_obj->fk_facture_fourn);
1508 $check_resql = $db->query($check_sql);
1510 $check_num = $db->num_rows($check_resql);
1511 if ($check_num == 0) {
1515 print
'<tr><td colspan="4" class="nowrap"><b>'.$langs->trans(
'SuppliersInvoices').
'</b></td></tr>';
1516 print
'<tr><td>fk_paiementfourn</td><td>fk_facturefourn</td><td>'.$langs->trans(
'Amount').
'</td><td> </td></tr>';
1519 print
'<tr class="oddeven">';
1520 print
'<td>'.$select_obj->rowid.
'</td><td>'.$select_obj->fk_facture_fourn.
'</td><td>'.$select_obj->amount.
'</td>';
1522 $insert_sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn SET ';
1523 $insert_sql .=
' fk_paiementfourn = \''.$select_obj->rowid.
'\',
';
1524 $insert_sql .= ' fk_facturefourn = \
''.$select_obj->fk_facture_fourn.
'\',
';
1525 $insert_sql .= ' amount = \
''.$select_obj->amount.
'\'';
1526 $insert_resql = $db->query($insert_sql);
1528 if ($insert_resql) {
1530 print
'<td><span class="ok">'.$langs->trans(
"OK").
'</span></td>';
1532 print
'<td><span class="error">Error on insert</span></td>';
1548 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1552 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiementfourn DROP COLUMN fk_facture_fourn";
1555 print
'<tr><td>'.$langs->trans(
"Error").
'</td></tr>';
1559 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1576 $tmpmysoc->setMysoc($conf);
1580 print
'<tr><td colspan="4">';
1583 print
'<b>'.$langs->trans(
'MigrationInvoice').
"</b><br>\n";
1586 $sql =
"SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as vatrate, fd.total_ttc, fd.info_bits,";
1587 $sql .=
" f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f";
1588 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facturedet as fd, ".MAIN_DB_PREFIX.
"facture as f";
1589 $sql .=
" WHERE fd.fk_facture = f.rowid";
1590 $sql .=
" AND (((fd.total_ttc = 0 AND fd.remise_percent != 100) or fd.total_ttc IS NULL) or f.total_ttc IS NULL)";
1594 $resql = $db->query($sql);
1596 $num = $db->num_rows($resql);
1600 $obj = $db->fetch_object($resql);
1602 $rowid = $obj->rowid;
1604 $pu = $obj->subprice;
1605 $vatrate = $obj->vatrate;
1606 $remise_percent = $obj->remise_percent;
1607 $remise_percent_global = $obj->remise_percent_global;
1608 $total_ttc_f = $obj->total_ttc_f;
1609 $info_bits = $obj->info_bits;
1613 $facligne->fetch($rowid);
1615 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $facligne->product_type, $tmpmysoc);
1616 $total_ht = $result[0];
1617 $total_tva = $result[1];
1618 $total_ttc = $result[2];
1620 $facligne->total_ht = $total_ht;
1621 $facligne->total_tva = $total_tva;
1622 $facligne->total_ttc = $total_ttc;
1624 dolibarr_install_syslog(
"upgrade2: line ".$rowid.
": facid=".$obj->facid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" remise_global=".$remise_percent_global.
" -> ".$total_ht.
", ".$total_tva.
", ".$total_ttc);
1626 $facligne->update_total();
1630 if (!$total_ttc_f) {
1632 $facture->id = $obj->facid;
1634 if ($facture->fetch($facture->id) >= 0) {
1635 if ($facture->update_price() > 0) {
1638 print
"Error id=".$facture->id;
1651 print $langs->trans(
"AlreadyDone");
1657 print
"Error #1 ".$db->error();
1679 $tmpmysoc->setMysoc($conf);
1683 print
'<tr><td colspan="4">';
1686 print
'<b>'.$langs->trans(
'MigrationProposal').
"</b><br>\n";
1689 $sql =
"SELECT pd.rowid, pd.qty, pd.subprice, pd.remise_percent, pd.tva_tx as vatrate, pd.info_bits,";
1690 $sql .=
" p.rowid as propalid, p.remise_percent as remise_percent_global";
1691 $sql .=
" FROM ".MAIN_DB_PREFIX.
"propaldet as pd, ".MAIN_DB_PREFIX.
"propal as p";
1692 $sql .=
" WHERE pd.fk_propal = p.rowid";
1693 $sql .=
" AND ((pd.total_ttc = 0 AND pd.remise_percent != 100) or pd.total_ttc IS NULL)";
1696 $resql = $db->query($sql);
1698 $num = $db->num_rows($resql);
1702 $obj = $db->fetch_object($resql);
1704 $rowid = $obj->rowid;
1706 $pu = $obj->subprice;
1707 $vatrate = $obj->vatrate;
1708 $remise_percent = $obj->remise_percent;
1709 $remise_percent_global = $obj->remise_percent_global;
1710 $info_bits = $obj->info_bits;
1714 $propalligne->fetch($rowid);
1716 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $propalligne->product_type, $tmpmysoc);
1717 $total_ht = $result[0];
1718 $total_tva = $result[1];
1719 $total_ttc = $result[2];
1721 $propalligne->total_ht = $total_ht;
1722 $propalligne->total_tva = $total_tva;
1723 $propalligne->total_ttc = $total_ttc;
1725 dolibarr_install_syslog(
"upgrade2: Line ".$rowid.
": propalid=".$obj->rowid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" remise_global=".$remise_percent_global.
" -> ".$total_ht.
", ".$total_tva.
", ".$total_ttc);
1727 $propalligne->update_total();
1752 print $langs->trans(
"AlreadyDone");
1759 print
"Error #1 ".$db->error();
1782 $tmpmysoc->setMysoc($conf);
1783 if (empty($tmpmysoc->country_id)) {
1784 $tmpmysoc->country_id = 0;
1787 print
'<tr><td colspan="4">';
1790 print
'<b>'.$langs->trans(
'MigrationContract').
"</b><br>\n";
1793 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1794 $sql .=
" c.rowid as contratid";
1795 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd, ".MAIN_DB_PREFIX.
"contrat as c";
1796 $sql .=
" WHERE cd.fk_contrat = c.rowid";
1797 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100 AND cd.subprice > 0) or cd.total_ttc IS NULL)";
1800 $resql = $db->query($sql);
1802 $num = $db->num_rows($resql);
1806 $obj = $db->fetch_object($resql);
1808 $rowid = $obj->rowid;
1810 $pu = $obj->subprice;
1811 $vatrate = $obj->vatrate;
1812 $remise_percent = $obj->remise_percent;
1813 $info_bits = $obj->info_bits;
1818 $contratligne->fetch($rowid);
1820 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, 0,
'HT', $info_bits, $contratligne->product_type, $tmpmysoc);
1821 $total_ht = $result[0];
1822 $total_tva = $result[1];
1823 $total_ttc = $result[2];
1825 $contratligne->total_ht = $total_ht;
1826 $contratligne->total_tva = $total_tva;
1827 $contratligne->total_ttc = $total_ttc;
1829 dolibarr_install_syslog(
"upgrade2: Line ".$rowid.
": contratdetid=".$obj->rowid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" -> ".$total_ht.
", ".$total_tva.
" , ".$total_ttc);
1831 $contratligne->update_total();
1836 print $langs->trans(
"AlreadyDone");
1843 print
"Error #1 ".$db->error();
1866 $tmpmysoc->setMysoc($conf);
1868 print
'<tr><td colspan="4">';
1871 print
'<b>'.$langs->trans(
'MigrationOrder').
"</b><br>\n";
1874 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1875 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1876 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"commande as c";
1877 $sql .=
" WHERE cd.fk_commande = c.rowid";
1878 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1881 $resql = $db->query($sql);
1883 $num = $db->num_rows($resql);
1887 $obj = $db->fetch_object($resql);
1889 $rowid = $obj->rowid;
1891 $pu = $obj->subprice;
1892 $vatrate = $obj->vatrate;
1893 $remise_percent = $obj->remise_percent;
1894 $remise_percent_global = $obj->remise_percent_global;
1895 $info_bits = $obj->info_bits;
1899 $commandeligne->fetch($rowid);
1901 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $tmpmysoc);
1902 $total_ht = $result[0];
1903 $total_tva = $result[1];
1904 $total_ttc = $result[2];
1906 $commandeligne->total_ht = $total_ht;
1907 $commandeligne->total_tva = $total_tva;
1908 $commandeligne->total_ttc = $total_ttc;
1910 dolibarr_install_syslog(
"upgrade2: Line ".$rowid.
" : commandeid=".$obj->rowid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" remise_global=".$remise_percent_global.
" -> ".$total_ht.
", ".$total_tva.
", ".$total_ttc);
1912 $commandeligne->update_total();
1936 print $langs->trans(
"AlreadyDone");
1953 print
"Error #1 ".$db->error();
1978 $tmpmysoc->setMysoc($conf);
1980 print
'<tr><td colspan="4">';
1983 print
'<b>'.$langs->trans(
'MigrationSupplierOrder').
"</b><br>\n";
1986 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1987 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1988 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cd, ".MAIN_DB_PREFIX.
"commande_fournisseur as c";
1989 $sql .=
" WHERE cd.fk_commande = c.rowid";
1990 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1993 $resql = $db->query($sql);
1995 $num = $db->num_rows($resql);
1999 $obj = $db->fetch_object($resql);
2001 $rowid = $obj->rowid;
2003 $pu = $obj->subprice;
2004 $vatrate = $obj->vatrate;
2005 $remise_percent = $obj->remise_percent;
2006 $remise_percent_global = $obj->remise_percent_global;
2007 $info_bits = $obj->info_bits;
2011 $commandeligne->fetch($rowid);
2013 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $mysoc);
2014 $total_ht = $result[0];
2015 $total_tva = $result[1];
2016 $total_ttc = $result[2];
2018 $commandeligne->total_ht = $total_ht;
2019 $commandeligne->total_tva = $total_tva;
2020 $commandeligne->total_ttc = $total_ttc;
2022 dolibarr_install_syslog(
"upgrade2: Line ".$rowid.
": commandeid=".$obj->rowid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" remise_global=".$remise_percent_global.
" -> ".$total_ht.
", ".$total_tva.
", ".$total_ttc);
2024 $commandeligne->update_total();
2048 print $langs->trans(
"AlreadyDone");
2065 print
"Error #1 ".$db->error();
2090 if (isModEnabled(
'facture')) {
2091 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
2093 if (count($modellist) == 0) {
2095 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('crabe','invoice')";
2096 $resql = $db->query($sql);
2103 if (isModEnabled(
'commande')) {
2104 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
2106 if (count($modellist) == 0) {
2108 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('einstein','order')";
2109 $resql = $db->query($sql);
2116 if (isModEnabled(
"expedition")) {
2117 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
2119 if (count($modellist) == 0) {
2121 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('rouget','shipping')";
2122 $resql = $db->query($sql);
2145 print
'<tr><td colspan="4">';
2148 print
'<b>'.$langs->trans(
'MigrationShipmentOrderMatching').
"</b><br>\n";
2150 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"fk_commande");
2151 $obj = $db->fetch_object($result);
2157 $sql =
"SELECT e.rowid, e.fk_commande FROM ".MAIN_DB_PREFIX.
"expedition as e";
2158 $resql = $db->query($sql);
2161 $num = $db->num_rows($resql);
2165 $obj = $db->fetch_object($resql);
2167 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_exp (fk_expedition,fk_commande)";
2168 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2169 $resql2 = $db->query($sql);
2182 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition DROP COLUMN fk_commande";
2183 print $langs->trans(
'FieldRenamed').
"<br>\n";
2193 print $langs->trans(
'AlreadyDone').
"<br>\n";
2210 print
'<tr><td colspan="4">';
2213 print
'<b>'.$langs->trans(
'MigrationDeliveryOrderMatching').
"</b><br>\n";
2215 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_commande");
2216 $obj = $db->fetch_object($result);
2222 $sql =
"SELECT l.rowid, l.fk_commande,";
2223 $sql .=
" c.ref_client, c.date_livraison as delivery_date";
2224 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l, ".MAIN_DB_PREFIX.
"commande as c";
2225 $sql .=
" WHERE c.rowid = l.fk_commande";
2226 $resql = $db->query($sql);
2229 $num = $db->num_rows($resql);
2233 $obj = $db->fetch_object($resql);
2235 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_liv (fk_livraison,fk_commande)";
2236 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2237 $resql2 = $db->query($sql);
2240 $delivery_date = $db->jdate($obj->delivery_date);
2242 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2243 $sqlu .=
" ref_client = '".$db->escape($obj->ref_client).
"'";
2244 $sqlu .=
", date_livraison = '".$db->idate($delivery_date).
"'";
2245 $sqlu .=
" WHERE rowid = ".((int) $obj->rowid);
2246 $resql3 = $db->query($sqlu);
2262 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_commande";
2263 print $langs->trans(
'FieldRenamed').
"<br>\n";
2273 print $langs->trans(
'AlreadyDone').
"<br>\n";
2290 print
'<tr><td colspan="4">';
2293 print
'<b>'.$langs->trans(
'MigrationDeliveryDetail').
"</b><br>\n";
2297 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_commande_ligne");
2298 $obj = $db->fetch_object($result);
2304 $sql =
"SELECT cd.rowid, cd.fk_product, cd.description, cd.subprice, cd.total_ht";
2305 $sql .=
", ld.fk_livraison";
2306 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"livraisondet as ld";
2307 $sql .=
" WHERE ld.fk_commande_ligne = cd.rowid";
2308 $resql = $db->query($sql);
2311 $num = $db->num_rows($resql);
2315 $obj = $db->fetch_object($resql);
2317 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"livraisondet SET";
2318 $sql .=
" fk_product = ".((int) $obj->fk_product);
2319 $sql .=
",description = '".$db->escape($obj->description).
"'";
2320 $sql .=
",subprice = ".price2num($obj->subprice);
2321 $sql .=
",total_ht = ".price2num($obj->total_ht);
2322 $sql .=
" WHERE fk_commande_ligne = ".((int) $obj->rowid);
2323 $resql2 = $db->query($sql);
2326 $sql =
"SELECT total_ht";
2327 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
2328 $sql .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2329 $resql3 = $db->query($sql);
2332 $obju = $db->fetch_object($resql3);
2333 $total_ht = $obju->total_ht + $obj->total_ht;
2335 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2336 $sqlu .=
" total_ht = ".price2num($total_ht,
'MT');
2337 $sqlu .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2338 $resql4 = $db->query($sqlu);
2358 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet CHANGE fk_commande_ligne fk_origin_line integer";
2359 print $langs->trans(
'FieldRenamed').
"<br>\n";
2369 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_origin_line");
2370 $obj = $db->fetch_object($result);
2372 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet ADD COLUMN fk_origin_line integer after fk_livraison";
2375 print $langs->trans(
'AlreadyDone').
"<br>\n";
2392 print
'<tr><td colspan="4">';
2395 print
'<b>'.$langs->trans(
'MigrationStockDetail').
"</b><br>\n";
2401 $sql =
"SELECT SUM(reel) as total, fk_product";
2402 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_stock as ps";
2403 $sql .=
" GROUP BY fk_product";
2404 $resql = $db->query($sql);
2407 $num = $db->num_rows($resql);
2411 $obj = $db->fetch_object($resql);
2413 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET";
2414 $sql .=
" stock = ".price2num($obj->total,
'MS');
2415 $sql .=
" WHERE rowid = ".((int) $obj->fk_product);
2417 $resql2 = $db->query($sql);
2454 print
'<tr><td colspan="4">';
2457 print
'<b>'.$langs->trans(
'MigrationMenusDetail').
"</b><br>\n";
2461 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"menu_constraint")) {
2464 $sql =
"SELECT m.rowid, mc.action";
2465 $sql .=
" FROM ".MAIN_DB_PREFIX.
"menu_constraint as mc, ".MAIN_DB_PREFIX.
"menu_const as md, ".MAIN_DB_PREFIX.
"menu as m";
2466 $sql .=
" WHERE md.fk_menu = m.rowid AND md.fk_constraint = mc.rowid";
2467 $sql .=
" AND m.enabled = '1'";
2468 $resql = $db->query($sql);
2471 $num = $db->num_rows($resql);
2474 $obj = $db->fetch_object($resql);
2476 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"menu SET";
2477 $sql .=
" enabled = '".$db->escape($obj->action).
"'";
2478 $sql .=
" WHERE rowid = ".((int) $obj->rowid);
2479 $sql .=
" AND enabled = '1'";
2481 $resql2 = $db->query($sql);
2502 print $langs->trans(
'AlreadyDone').
"<br>\n";
2521 print
'<tr><td colspan="4">';
2524 print
'<b>'.$langs->trans(
'MigrationDeliveryAddress').
"</b><br>\n";
2528 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"co_exp")) {
2531 $sql =
"SELECT c.fk_adresse_livraison, ce.fk_expedition";
2532 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande as c";
2533 $sql .=
", ".MAIN_DB_PREFIX.
"co_exp as ce";
2534 $sql .=
" WHERE c.rowid = ce.fk_commande";
2535 $sql .=
" AND c.fk_adresse_livraison IS NOT NULL AND c.fk_adresse_livraison != 0";
2537 $resql = $db->query($sql);
2540 $num = $db->num_rows($resql);
2544 $obj = $db->fetch_object($resql);
2546 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
2547 $sql .=
" fk_adresse_livraison = '".$db->escape($obj->fk_adresse_livraison).
"'";
2548 $sql .=
" WHERE rowid = ".((int) $obj->fk_expedition);
2550 $resql2 = $db->query($sql);
2559 print $langs->trans(
'AlreadyDone').
"<br>\n";
2572 print $langs->trans(
'AlreadyDone').
"<br>\n";
2591 if (($db->type ==
'mysql' || $db->type ==
'mysqli')) {
2593 dolibarr_install_syslog(
"upgrade2::migrate_restore_missing_links Version of database too old to make this migrate action");
2597 print
'<tr><td colspan="4">';
2600 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (1)<br>\n";
2606 $table1 =
'facturedet';
2607 $field1 =
'fk_remise_except';
2608 $table2 =
'societe_remise_except';
2609 $field2 =
'fk_facture_line';
2613 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2614 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2615 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2616 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2617 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2620 $resql = $db->query($sql);
2623 $num = $db->num_rows($resql);
2627 $obj = $db->fetch_object($resql);
2629 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2630 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table2.
" SET";
2631 $sql .=
" ".$field2.
" = '".$db->escape($obj->rowid).
"'";
2632 $sql .=
" WHERE rowid = ".((int) $obj->field);
2634 $resql2 = $db->query($sql);
2643 print $langs->trans(
'AlreadyDone').
"<br>\n";
2659 print
'<tr><td colspan="4">';
2662 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (2)<br>\n";
2665 $table2 =
'facturedet';
2666 $field2 =
'fk_remise_except';
2667 $table1 =
'societe_remise_except';
2668 $field1 =
'fk_facture_line';
2672 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2673 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2674 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2675 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2676 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2679 $resql = $db->query($sql);
2682 $num = $db->num_rows($resql);
2686 $obj = $db->fetch_object($resql);
2688 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2689 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table2.
" SET";
2690 $sql .=
" ".$field2.
" = '".$db->escape($obj->rowid).
"'";
2691 $sql .=
" WHERE rowid = ".((int) $obj->field);
2693 $resql2 = $db->query($sql);
2702 print $langs->trans(
'AlreadyDone').
"<br>\n";
2717 return ($error ? -1 : 1);
2732 print
'<tr><td colspan="4">';
2735 print
'<b>'.$langs->trans(
'MigrationProjectUserResp').
"</b><br>\n";
2737 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"projet",
"fk_user_resp");
2738 $obj = $db->fetch_object($result);
2744 $sql =
"SELECT rowid, fk_user_resp FROM ".MAIN_DB_PREFIX.
"projet";
2745 $resql = $db->query($sql);
2748 $num = $db->num_rows($resql);
2752 $obj = $db->fetch_object($resql);
2754 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2755 $sql2 .=
"datecreate";
2756 $sql2 .=
", statut";
2757 $sql2 .=
", element_id";
2758 $sql2 .=
", fk_c_type_contact";
2759 $sql2 .=
", fk_socpeople";
2760 $sql2 .=
") VALUES (";
2761 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2763 $sql2 .=
", ".$obj->rowid;
2765 $sql2 .=
", ".$obj->fk_user_resp;
2768 if ($obj->fk_user_resp > 0) {
2769 $resql2 = $db->query($sql2);
2782 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"projet DROP COLUMN fk_user_resp";
2783 if ($db->query($sqlDrop)) {
2796 print $langs->trans(
'AlreadyDone').
"<br>\n";
2813 print
'<tr><td colspan="4">';
2816 print
'<b>'.$langs->trans(
'MigrationProjectTaskActors').
"</b><br>\n";
2818 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"projet_task_actors")) {
2823 $sql =
"SELECT fk_projet_task as fk_project_task, fk_user FROM ".MAIN_DB_PREFIX.
"projet_task_actors";
2824 $resql = $db->query($sql);
2827 $num = $db->num_rows($resql);
2831 $obj = $db->fetch_object($resql);
2833 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2834 $sql2 .=
"datecreate";
2835 $sql2 .=
", statut";
2836 $sql2 .=
", element_id";
2837 $sql2 .=
", fk_c_type_contact";
2838 $sql2 .=
", fk_socpeople";
2839 $sql2 .=
") VALUES (";
2840 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2842 $sql2 .=
", ".$obj->fk_project_task;
2844 $sql2 .=
", ".$obj->fk_user;
2847 $resql2 = $db->query($sql2);
2859 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.
"projet_task_actors";
2860 if ($db->query($sqlDrop)) {
2873 print $langs->trans(
'AlreadyDone').
"<br>\n";
2893 print
'<tr><td colspan="4">';
2896 print
'<b>'.$langs->trans(
'MigrationRelationshipTables', MAIN_DB_PREFIX.$table).
"</b><br>\n";
2900 if ($db->DDLInfoTable(MAIN_DB_PREFIX.$table)) {
2905 $sqlSelect =
"SELECT ".$fk_source.
", ".$fk_target;
2906 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.$table;
2908 $resql = $db->query($sqlSelect);
2911 $num = $db->num_rows($resql);
2915 $obj = $db->fetch_object($resql);
2917 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
2918 $sqlInsert .=
"fk_source";
2919 $sqlInsert .=
", sourcetype";
2920 $sqlInsert .=
", fk_target";
2921 $sqlInsert .=
", targettype";
2922 $sqlInsert .=
") VALUES (";
2923 $sqlInsert .= $obj->$fk_source;
2924 $sqlInsert .=
", '".$db->escape($sourcetype).
"'";
2925 $sqlInsert .=
", ".$obj->$fk_target;
2926 $sqlInsert .=
", '".$db->escape($targettype).
"'";
2929 $result = $db->query($sqlInsert);
2938 print $langs->trans(
'AlreadyDone').
"<br>\n";
2942 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.$table;
2943 if ($db->query($sqlDrop)) {
2956 print $langs->trans(
'AlreadyDone').
"<br>\n";
2974 print
'<tr><td colspan="4">';
2977 print
'<b>'.$langs->trans(
'MigrationProjectTaskTime').
"</b><br>\n";
2983 $sql =
"SELECT rowid, fk_element, element_duration";
2984 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_time";
2985 $resql = $db->query($sql);
2988 $num = $db->num_rows($resql);
2991 $totaltime = array();
2995 $obj = $db->fetch_object($resql);
2997 if ($obj->element_duration > 0) {
3000 list($hour, $min) = explode(
'.', $obj->element_duration);
3001 $hour = $hour * 60 * 60;
3002 $min = ($min / 100) * 60 * 60;
3003 $newtime = $hour + $min;
3005 $sql2 =
"UPDATE ".MAIN_DB_PREFIX.
"element_time SET";
3006 $sql2 .=
" element_duration = ".((int) $newtime);
3007 $sql2 .=
" WHERE rowid = ".((int) $obj->rowid);
3009 $resql2 = $db->query($sql2);
3016 if (!empty($totaltime[$obj->fk_element])) {
3017 $totaltime[$obj->fk_element] += $newtime;
3019 $totaltime[$obj->fk_element] = $newtime;
3022 if (!empty($totaltime[$obj->fk_element])) {
3023 $totaltime[$obj->fk_element] += $obj->element_duration;
3025 $totaltime[$obj->fk_element] = $obj->element_duration;
3034 foreach ($totaltime as $taskid => $total_duration) {
3035 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"projet_task SET";
3036 $sql .=
" duration_effective = ".((int) $total_duration);
3037 $sql .=
" WHERE rowid = ".((int) $taskid);
3039 $resql = $db->query($sql);
3046 print $langs->trans(
'AlreadyDone').
"<br>\n";
3052 print $langs->trans(
'AlreadyDone').
"<br>\n";
3077 print
'<tr><td colspan="4">';
3080 print
'<b>'.$langs->trans(
'MigrationCustomerOrderShipping').
"</b><br>\n";
3084 $result1 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"ref_customer");
3085 $result2 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"date_delivery");
3086 $obj1 = $db->fetch_object($result1);
3087 $obj2 = $db->fetch_object($result2);
3088 if (!$obj1 && !$obj2) {
3093 $sqlAdd1 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN ref_customer varchar(30) AFTER entity";
3094 $sqlAdd2 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition";
3096 if ($db->query($sqlAdd1) && $db->query($sqlAdd2)) {
3097 $sqlSelect =
"SELECT e.rowid as shipping_id, c.ref_client, c.date_livraison as delivery_date";
3098 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"expedition as e";
3099 $sqlSelect .=
", ".MAIN_DB_PREFIX.
"element_element as el";
3100 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"commande as c ON c.rowid = el.fk_source AND el.sourcetype = 'commande'";
3101 $sqlSelect .=
" WHERE e.rowid = el.fk_target";
3102 $sqlSelect .=
" AND el.targettype = 'shipping'";
3104 $resql = $db->query($sqlSelect);
3107 $num = $db->num_rows($resql);
3111 $obj = $db->fetch_object($resql);
3113 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
3114 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_client).
"'";
3115 $sqlUpdate .=
", date_delivery = '".$db->escape($obj->delivery_date ? $obj->delivery_date :
'null').
"'";
3116 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->shipping_id);
3118 $result = $db->query($sqlUpdate);
3127 print $langs->trans(
'AlreadyDone').
"<br>\n";
3145 print $langs->trans(
'AlreadyDone').
"<br>\n";
3161 print
'<tr><td colspan="4">';
3164 print
'<b>'.$langs->trans(
'MigrationShippingDelivery').
"</b><br>\n";
3168 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_expedition");
3169 $obj = $db->fetch_object($result);
3175 $sqlSelect =
"SELECT rowid, fk_expedition";
3176 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
3177 $sqlSelect .=
" WHERE fk_expedition is not null";
3179 $resql = $db->query($sqlSelect);
3182 $num = $db->num_rows($resql);
3186 $obj = $db->fetch_object($resql);
3188 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
3189 $sqlInsert .=
"fk_source";
3190 $sqlInsert .=
", sourcetype";
3191 $sqlInsert .=
", fk_target";
3192 $sqlInsert .=
", targettype";
3193 $sqlInsert .=
") VALUES (";
3194 $sqlInsert .= $obj->fk_expedition;
3195 $sqlInsert .=
", 'shipping'";
3196 $sqlInsert .=
", ".$obj->rowid;
3197 $sqlInsert .=
", 'delivery'";
3200 $result = $db->query($sqlInsert);
3202 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET fk_expedition = NULL";
3203 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3205 $result = $db->query($sqlUpdate);
3218 print $langs->trans(
'AlreadyDone').
"<br>\n";
3222 $sqlDelete =
"DELETE FROM ".MAIN_DB_PREFIX.
"element_element WHERE sourcetype = 'commande' AND targettype = 'delivery'";
3223 $db->query($sqlDelete);
3228 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_expedition";
3229 $db->query($sqlDrop);
3239 print $langs->trans(
'AlreadyDone').
"<br>\n";
3256 print
'<tr><td colspan="4">';
3259 print
'<b>'.$langs->trans(
'MigrationShippingDelivery2').
"</b><br>\n";
3267 $sqlSelect =
"SELECT l.rowid as delivery_id, e.ref_customer, e.date_delivery";
3268 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l,";
3269 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"element_element as el,";
3270 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"expedition as e";
3271 $sqlSelect .=
" WHERE l.rowid = el.fk_target";
3272 $sqlSelect .=
" AND el.targettype = 'delivery'";
3273 $sqlSelect .=
" AND e.rowid = el.fk_source AND el.sourcetype = 'shipping'";
3274 $sqlSelect .=
" AND (e.ref_customer IS NOT NULL OR e.date_delivery IS NOT NULL)";
3276 $sqlSelect .=
" AND (l.ref_customer IS NULL".($db->type !=
'pgsql' ?
" or l.ref_customer = ''" :
"").
")";
3277 $sqlSelect .=
" AND (l.date_delivery IS NULL".($db->type !=
'pgsql' ?
" or l.date_delivery = ''" :
"").
")";
3279 $resql = $db->query($sqlSelect);
3282 $num = $db->num_rows($resql);
3286 $obj = $db->fetch_object($resql);
3288 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
3289 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_customer).
"',";
3290 $sqlUpdate .=
" date_delivery = ".($obj->date_delivery ?
"'".$db->escape($obj->date_delivery).
"'" :
'null');
3291 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->delivery_id);
3293 $result = $db->query($sqlUpdate);
3302 print $langs->trans(
'AlreadyDone').
"<br>\n";
3329 print
'<tr><td colspan="4">';
3332 print
'<b>'.$langs->trans(
'MigrationActioncommElement').
"</b><br>\n";
3335 'propal' =>
'propalrowid',
3336 'order' =>
'fk_commande',
3337 'invoice' =>
'fk_facture',
3338 'contract' =>
'fk_contract',
3339 'order_supplier' =>
'fk_supplier_order',
3340 'invoice_supplier' =>
'fk_supplier_invoice'
3343 foreach ($elements as $type => $field) {
3344 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"actioncomm", $field);
3345 $obj = $db->fetch_object($result);
3351 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"actioncomm SET ";
3352 $sql .=
"fk_element = ".$field.
", elementtype = '".$db->escape($type).
"'";
3353 $sql .=
" WHERE ".$field.
" IS NOT NULL";
3354 $sql .=
" AND fk_element IS NULL";
3355 $sql .=
" AND elementtype IS NULL";
3357 $resql = $db->query($sql);
3371 print $langs->trans(
'AlreadyDone').
"<br>\n";
3388 print
'<tr><td colspan="4">';
3391 print
'<b>'.$langs->trans(
'MigrationPaymentMode').
"</b><br>\n";
3394 'old_id' => array(5, 8, 9, 10, 11),
3395 'new_id' => array(50, 51, 52, 53, 54),
3396 'code' => array(
'VAD',
'TRA',
'LCR',
'FAC',
'PRO'),
3397 'tables' => array(
'commande_fournisseur',
'commande',
'facture_rec',
'facture',
'propal')
3401 foreach ($elements[
'old_id'] as $key => $old_id) {
3406 $sqlSelect =
"SELECT id";
3407 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"c_paiement";
3408 $sqlSelect .=
" WHERE id = ".((int) $old_id);
3409 $sqlSelect .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3411 $resql = $db->query($sqlSelect);
3413 $num = $db->num_rows($resql);
3419 $sqla =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET";
3420 $sqla .=
" fk_paiement = ".((int) $elements[
'new_id'][$key]);
3421 $sqla .=
" WHERE fk_paiement = ".((int) $old_id);
3422 $sqla .=
" AND fk_paiement IN (SELECT id FROM ".MAIN_DB_PREFIX.
"c_paiement WHERE id = ".((int) $old_id).
" AND code = '".$db->escape($elements[
'code'][$key]).
"')";
3423 $resqla = $db->query($sqla);
3425 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"c_paiement SET";
3426 $sql .=
" id = ".((int) $elements[
'new_id'][$key]);
3427 $sql .=
" WHERE id = ".((int) $old_id);
3428 $sql .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3429 $resql = $db->query($sql);
3431 if ($resqla && $resql) {
3432 foreach ($elements[
'tables'] as $table) {
3433 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table.
" SET ";
3434 $sql .=
"fk_mode_reglement = ".((int) $elements[
'new_id'][$key]);
3435 $sql .=
" WHERE fk_mode_reglement = ".((int) $old_id);
3437 $resql = $db->query($sql);
3460 print $langs->trans(
'AlreadyDone').
"<br>\n";
3478 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"categorie_association");
3480 $obj = $db->fetch_object($result);
3484 $sql =
"SELECT fk_categorie_mere, fk_categorie_fille";
3485 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3487 $resql = $db->query($sql);
3489 $num = $db->num_rows($resql);
3490 while ($obj = $db->fetch_object($resql)) {
3491 if (!isset($filles[$obj->fk_categorie_fille])) {
3492 if ($obj->fk_categorie_mere != $obj->fk_categorie_fille) {
3493 $filles[$obj->fk_categorie_fille] = 1;
3494 $couples[$obj->fk_categorie_mere.
'_'.$obj->fk_categorie_fille] = array(
'mere'=>$obj->fk_categorie_mere,
'fille'=>$obj->fk_categorie_fille);
3502 if (count($couples) > 0 && $num > count($couples)) {
3508 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_association";
3510 $resqld = $db->query($sql);
3513 foreach ($couples as $key => $val) {
3514 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_association(fk_categorie_mere,fk_categorie_fille)";
3515 $sql .=
" VALUES(".((int) $val[
'mere']).
", ".((int) $val[
'fille']).
")";
3517 $resqli = $db->query($sql);
3525 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3526 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Success").
' ('.$num.
'=>'.count($couples).
')</td></tr>';
3529 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3530 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Failed").
'</td></tr>';
3535 print
'<tr><td>'.$langs->trans(
"Error").
'</td>';
3536 print
'<td class="right"><div class="error">'.$db->lasterror().
'</div></td></tr>';
3553 print
'<tr><td colspan="4">';
3556 print
'<b>'.$langs->trans(
'MigrationCategorieAssociation').
"</b><br>\n";
3560 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"categorie_association")) {
3565 $sqlSelect =
"SELECT fk_categorie_mere, fk_categorie_fille";
3566 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3568 $resql = $db->query($sqlSelect);
3571 $num = $db->num_rows($resql);
3575 $obj = $db->fetch_object($resql);
3577 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"categorie SET ";
3578 $sqlUpdate .=
"fk_parent = ".((int) $obj->fk_categorie_mere);
3579 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->fk_categorie_fille);
3581 $result = $db->query($sqlUpdate);
3590 print $langs->trans(
'AlreadyDone').
"<br>\n";
3603 print $langs->trans(
'AlreadyDone').
"<br>\n";
3619 print
'<tr><td colspan="4">';
3622 print
'<b>'.$langs->trans(
'MigrationEvents').
"</b><br>\n";
3630 $sqlSelect =
"SELECT a.id, a.fk_user_action";
3631 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3632 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"actioncomm_resources as ar ON ar.fk_actioncomm = a.id AND ar.element_type = 'user' AND ar.fk_element = a.fk_user_action";
3633 $sqlSelect .=
" WHERE fk_user_action > 0 AND fk_user_action NOT IN (SELECT fk_element FROM ".MAIN_DB_PREFIX.
"actioncomm_resources as ar WHERE ar.fk_actioncomm = a.id AND ar.element_type = 'user')";
3634 $sqlSelect .=
" ORDER BY a.id";
3637 $resql = $db->query($sqlSelect);
3640 $num = $db->num_rows($resql);
3644 $obj = $db->fetch_object($resql);
3646 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3647 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'user', ".((int) $obj->fk_user_action).
")";
3649 $result = $db->query($sqlUpdate);
3658 print $langs->trans(
'AlreadyDone').
"<br>\n";
3685 print
'<tr><td colspan="4">';
3688 print
'<b>'.$langs->trans(
'MigrationEventsContact').
"</b><br>\n";
3696 $sqlSelect =
"SELECT a.id, a.fk_contact";
3697 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3698 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"actioncomm_resources as ar ON ar.fk_actioncomm = a.id AND ar.element_type = 'socpeople' AND ar.fk_element = a.fk_contact";
3699 $sqlSelect .=
" WHERE fk_contact > 0 AND fk_contact NOT IN (SELECT fk_element FROM ".MAIN_DB_PREFIX.
"actioncomm_resources as ar WHERE ar.fk_actioncomm = a.id AND ar.element_type = 'socpeople')";
3700 $sqlSelect .=
" ORDER BY a.id";
3703 $resql = $db->query($sqlSelect);
3706 $num = $db->num_rows($resql);
3710 $obj = $db->fetch_object($resql);
3712 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3713 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'socpeople', ".((int) $obj->fk_contact).
")";
3715 $result = $db->query($sqlUpdate);
3724 print $langs->trans(
'AlreadyDone').
"<br>\n";
3754 require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
3756 print
'<tr><td colspan="4">';
3759 print
'<b>'.$langs->trans(
'MigrationResetBlockedLog').
"</b><br>\n";
3767 $sqlSelect =
"SELECT DISTINCT entity";
3768 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"blockedlog";
3772 $resql = $db->query($sqlSelect);
3775 $num = $db->num_rows($resql);
3779 $obj = $db->fetch_object($resql);
3781 print
'Process entity '.$obj->entity;
3783 $sqlSearch =
"SELECT count(rowid) as nb FROM ".MAIN_DB_PREFIX.
"blockedlog WHERE action = 'MODULE_SET' and entity = ".((int) $obj->entity);
3784 $resqlSearch = $db->query($sqlSearch);
3786 $objSearch = $db->fetch_object($resqlSearch);
3788 if ($objSearch && $objSearch->nb == 0) {
3789 print
' - Record for entity must be reset...';
3791 $sqlUpdate =
"DELETE FROM ".MAIN_DB_PREFIX.
"blockedlog";
3792 $sqlUpdate .=
" WHERE entity = ".((int) $obj->entity);
3793 $resqlUpdate = $db->query($sqlUpdate);
3794 if (!$resqlUpdate) {
3801 $object->element =
'module';
3802 $object->ref =
'systemevent';
3803 $object->entity = $obj->entity;
3807 $b->setObjectData($object,
'MODULE_SET', 0);
3809 $res = $b->create($user);
3815 print
' - '.$langs->trans(
'AlreadyInV7').
'<br>';
3824 print $langs->trans(
'NothingToDo').
"<br>\n";
3851 print
'<tr><td colspan="4">';
3854 print
'<b>'.$langs->trans(
'MigrationRemiseEntity').
"</b><br>\n";
3862 $sqlSelect =
"SELECT sr.rowid, s.entity";
3863 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise as sr, ".MAIN_DB_PREFIX.
"societe as s";
3864 $sqlSelect .=
" WHERE sr.fk_soc = s.rowid and sr.entity != s.entity";
3868 $resql = $db->query($sqlSelect);
3871 $num = $db->num_rows($resql);
3875 $obj = $db->fetch_object($resql);
3877 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise SET";
3878 $sqlUpdate .=
" entity = ".$obj->entity;
3879 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3881 $result = $db->query($sqlUpdate);
3891 print $langs->trans(
'AlreadyDone').
"<br>\n";
3917 print
'<tr><td colspan="4">';
3920 print
'<b>'.$langs->trans(
'MigrationRemiseExceptEntity').
"</b><br>\n";
3928 $sqlSelect =
"SELECT sr.rowid, sr.fk_soc, sr.fk_facture_source, sr.fk_facture, sr.fk_facture_line";
3929 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as sr";
3932 $resql = $db->query($sqlSelect);
3935 $num = $db->num_rows($resql);
3939 $obj = $db->fetch_object($resql);
3941 if (!empty($obj->fk_facture_source) || !empty($obj->fk_facture)) {
3942 $fk_facture = (!empty($obj->fk_facture_source) ? $obj->fk_facture_source : $obj->fk_facture);
3944 $sqlSelect2 =
"SELECT f.entity";
3945 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f";
3946 $sqlSelect2 .=
" WHERE f.rowid = ".((int) $fk_facture);
3947 } elseif (!empty($obj->fk_facture_line)) {
3948 $sqlSelect2 =
"SELECT f.entity";
3949 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f, ".MAIN_DB_PREFIX.
"facturedet as fd";
3950 $sqlSelect2 .=
" WHERE fd.rowid = ".((int) $obj->fk_facture_line);
3951 $sqlSelect2 .=
" AND fd.fk_facture = f.rowid";
3953 $sqlSelect2 =
"SELECT s.entity";
3954 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
3955 $sqlSelect2 .=
" WHERE s.rowid = ".((int) $obj->fk_soc);
3958 $resql2 = $db->query($sqlSelect2);
3960 if ($db->num_rows($resql2) > 0) {
3961 $obj2 = $db->fetch_object($resql2);
3963 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise_except SET";
3964 $sqlUpdate .=
" entity = ".((int) $obj2->entity);
3965 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3967 $result = $db->query($sqlUpdate);
3982 print $langs->trans(
'AlreadyDone').
"<br>\n";
4009 print
'<tr><td colspan="4">';
4011 print
'<b>'.$langs->trans(
'MigrationUserRightsEntity').
"</b><br>\n";
4019 $sqlSelect =
"SELECT u.rowid, u.entity";
4020 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"user as u";
4021 $sqlSelect .=
" WHERE u.entity > 1";
4024 $resql = $db->query($sqlSelect);
4027 $num = $db->num_rows($resql);
4031 $obj = $db->fetch_object($resql);
4033 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"user_rights SET";
4034 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4035 $sqlUpdate .=
" WHERE fk_user = ".((int) $obj->rowid);
4037 $result = $db->query($sqlUpdate);
4047 print $langs->trans(
'AlreadyDone').
"<br>\n";
4074 print
'<tr><td colspan="4">';
4076 print
'<b>'.$langs->trans(
'MigrationUserGroupRightsEntity').
"</b><br>\n";
4084 $sqlSelect =
"SELECT u.rowid, u.entity";
4085 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"usergroup as u";
4086 $sqlSelect .=
" WHERE u.entity > 1";
4089 $resql = $db->query($sqlSelect);
4092 $num = $db->num_rows($resql);
4096 $obj = $db->fetch_object($resql);
4098 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"usergroup_rights SET";
4099 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4100 $sqlUpdate .=
" WHERE fk_usergroup = ".((int) $obj->rowid);
4102 $result = $db->query($sqlUpdate);
4112 print $langs->trans(
'AlreadyDone').
"<br>\n";
4143 if (is_dir(DOL_DATA_ROOT.$oldname) && !file_exists(DOL_DATA_ROOT.$newname)) {
4144 dolibarr_install_syslog(
"upgrade2::migrate_rename_directories move ".DOL_DATA_ROOT.$oldname.
' into '.DOL_DATA_ROOT.$newname);
4145 @rename(DOL_DATA_ROOT.$oldname, DOL_DATA_ROOT.$newname);
4165 $filetodeletearray = array(
4166 '/core/ajax/ajaxcompanies.php',
4167 '/core/triggers/interface_demo.class.php',
4168 '/core/menus/barre_left/default.php',
4169 '/core/menus/barre_top/default.php',
4170 '/core/modules/modComptabiliteExpert.class.php',
4171 '/core/modules/modCommercial.class.php',
4172 '/core/modules/modProduit.class.php',
4173 '/core/modules/modSkype.class.php',
4174 '/core/triggers/interface_modWebcalendar_Webcalsynchro.class.php',
4175 '/core/triggers/interface_modCommande_Ecotax.class.php',
4176 '/core/triggers/interface_modCommande_fraisport.class.php',
4177 '/core/triggers/interface_modPropale_PropalWorkflow.class.php',
4178 '/core/triggers/interface_99_modWebhook_WebhookTriggers.class.php',
4179 '/core/triggers/interface_99_modZapier_ZapierTriggers.class.php',
4180 '/core/menus/smartphone/iphone.lib.php',
4181 '/core/menus/smartphone/iphone_backoffice.php',
4182 '/core/menus/smartphone/iphone_frontoffice.php',
4183 '/core/menus/standard/auguria_backoffice.php',
4184 '/core/menus/standard/auguria_frontoffice.php',
4185 '/core/menus/standard/eldy_backoffice.php',
4186 '/core/menus/standard/eldy_frontoffice.php',
4187 '/core/modules/export/export_excel.modules.php',
4188 '/core/modules/export/export_csv.modules.php',
4189 '/core/modules/export/exportcsv.modules.php',
4190 '/core/modules/export/export_excel2007new.modules.php',
4191 '/core/modules/facture/pdf_crabe.modules.php',
4192 '/core/modules/facture/pdf_oursin.modules.php',
4193 '/core/modules/mailings/contacts2.modules.php',
4194 '/core/modules/mailings/contacts3.modules.php',
4195 '/core/modules/mailings/contacts4.modules.php',
4196 '/core/modules/mailings/framboise.modules.php',
4197 '/core/modules/mailings/dolibarr_services_expired.modules.php',
4198 '/core/modules/mailings/peche.modules.php',
4199 '/core/modules/mailings/poire.modules.php',
4200 '/core/modules/mailings/kiwi.modules.php',
4201 '/core/boxes/box_members.php',
4203 '/includes/restler/framework/Luracast/Restler/Data/Object.php',
4204 '/includes/nusoap/lib/class.*',
4205 '/phenix/inc/triggers/interface_modPhenix_Phenixsynchro.class.php',
4206 '/webcalendar/inc/triggers/interface_modWebcalendar_webcalsynchro.class.php',
4208 '/api/class/api_generic.class.php',
4209 '/asterisk/cidlookup.php',
4210 '/categories/class/api_category.class.php',
4211 '/categories/class/api_deprecated_category.class.php',
4212 '/compta/facture/class/api_invoice.class.php',
4213 '/commande/class/api_commande.class.php',
4214 '/partnership/class/api_partnership.class.php',
4215 '/product/class/api_product.class.php',
4216 '/recruitment/class/api_recruitment.class.php',
4217 '/societe/class/api_contact.class.php',
4218 '/societe/class/api_thirdparty.class.php',
4219 '/support/online.php',
4220 '/takepos/class/actions_takepos.class.php',
4221 '/user/class/api_user.class.php',
4223 '/install/mysql/tables/llx_c_ticketsup_category.key.sql',
4224 '/install/mysql/tables/llx_c_ticketsup_category.sql',
4225 '/install/mysql/tables/llx_c_ticketsup_severity.key.sql',
4226 '/install/mysql/tables/llx_c_ticketsup_severity.sql',
4227 '/install/mysql/tables/llx_c_ticketsup_type.key.sql',
4228 '/install/mysql/tables/llx_c_ticketsup_type.sql'
4237 foreach ($filetodeletearray as $filetodelete) {
4239 if (file_exists(DOL_DOCUMENT_ROOT.$filetodelete) || preg_match(
'/\*/', $filetodelete)) {
4241 $result =
dol_delete_file(DOL_DOCUMENT_ROOT.$filetodelete, 0, 0, 0,
null,
true,
false);
4243 $langs->load(
"errors");
4244 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteFile", DOL_DOCUMENT_ROOT.$filetodelete);
4245 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4270 $filetodeletearray = array(
4271 DOL_DOCUMENT_ROOT.
'/core/modules/facture/terre',
4272 DOL_DOCUMENT_ROOT.
'/core/modules/facture/mercure',
4276 if (!empty($_SERVER[
"WINDIR"])) {
4277 $filetodeletearray[] = DOL_DOCUMENT_ROOT.
'/includes/phpoffice/PhpSpreadsheet';
4280 foreach ($filetodeletearray as $filetodelete) {
4282 if (file_exists($filetodelete)) {
4286 $langs->load(
"errors");
4287 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteDir", $filetodelete);
4288 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4312 if (count($listofmodule) == 0) {
4316 if (!is_object($user)) {
4317 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4318 $user =
new User($db);
4321 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules force=".$force.
", listofmodule=".join(
',', array_keys($listofmodule)));
4323 $reloadactionformodules = array(
4324 'MAIN_MODULE_AGENDA' => array(
'class' =>
'modAgenda',
'remove'=> 1),
4325 'MAIN_MODULE_API' => array(
'class' =>
'modApi'),
4326 'MAIN_MODULE_BARCODE' => array(
'class' =>
'modBarcode',
'remove'=> 1),
4327 'MAIN_MODULE_BLOCKEDLOG' => array(
'class' =>
'modBlockedLog',
'deleteinsertmenus'=> 1),
4328 'MAIN_MODULE_CRON' => array(
'class' =>
'modCron',
'remove'=> 1),
4329 'MAIN_MODULE_EXTERNALSITE' => array(
'class' =>
'modExternalSite',
'remove'=> 1),
4330 'MAIN_MODULE_SOCIETE' => array(
'class' =>
'modSociete',
'remove'=> 1),
4331 'MAIN_MODULE_PRODUIT' => array(
'class' =>
'modProduct'),
4332 'MAIN_MODULE_SERVICE' => array(
'class' =>
'modService'),
4333 'MAIN_MODULE_COMMANDE' => array(
'class' =>
'modCommande'),
4334 'MAIN_MODULE_FACTURE' => array(
'class' =>
'modFacture'),
4335 'MAIN_MODULE_FICHEINTER' => array(
'class' =>
'modFicheInter'),
4336 'MAIN_MODULE_FOURNISSEUR' => array(
'class' =>
'modFournisseur'),
4337 'MAIN_MODULE_HOLIDAY' => array(
'class' =>
'modHoliday',
'remove'=>1),
4338 'MAIN_MODULE_EXPEDITION' => array(
'class' =>
'modExpedition'),
4339 'MAIN_MODULE_EXPENSEREPORT' => array(
'class' =>
'modExpenseReport'),
4340 'MAIN_MODULE_DON' => array(
'class' =>
'modDon'),
4341 'MAIN_MODULE_ECM' => array(
'class' =>
'modECM',
'remove'=>1),
4342 'MAIN_MODULE_KNOWLEDGEMANAGEMENT' => array(
'class' =>
'modKnowledgeManagement',
'remove'=>1),
4343 'MAIN_MODULE_EVENTORGANIZATION' => array(
'class' =>
'modEventOrganization',
'remove'=>1),
4344 'MAIN_MODULE_PAYBOX' => array(
'class' =>
'modPaybox',
'remove'=>1),
4345 'MAIN_MODULE_PROPAL' => array(
'class' =>
'modPropale'),
4346 'MAIN_MODULE_SUPPLIERPROPOSAL' => array(
'class' =>
'modSupplierProposal',
'remove'=>1),
4347 'MAIN_MODULE_OPENSURVEY' => array(
'class' =>
'modOpenSurvey',
'remove'=>1),
4348 'MAIN_MODULE_PRODUCTBATCH' => array(
'class' =>
'modProductBatch',
'remove'=>1),
4349 'MAIN_MODULE_TAKEPOS' => array(
'class' =>
'modTakePos',
'remove'=>1),
4350 'MAIN_MODULE_EMAILCOLLECTOR' => array(
'class' =>
'modEmailCollector',
'remove'=>1),
4353 foreach ($listofmodule as $moduletoreload => $reloadmode) {
4354 if (empty($moduletoreload) || (empty($conf->global->$moduletoreload) && !$force)) {
4360 if (!empty($reloadactionformodules[$moduletoreload])) {
4361 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreload.
" with mode ".$reloadmode);
4363 $val = $reloadactionformodules[$moduletoreload];
4364 $classformodule = $val[
'class'];
4365 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/'.$classformodule.
'.class.php';
4367 $mod =
new $classformodule($db);
4368 if (!empty($val[
'remove'])) {
4369 $mod->remove(
'noboxes');
4371 if (!empty($val[
'deleteinsertmenus'])) {
4373 $mod->delete_menus();
4374 $mod->insert_menus();
4376 $mod->init($reloadmode);
4381 $tmp = preg_match(
'/MAIN_MODULE_([a-zA-Z0-9]+)/', $moduletoreload, $reg);
4382 if (!empty($reg[1])) {
4383 if (strtoupper($moduletoreload) == $moduletoreload) {
4384 $moduletoreloadshort = ucfirst(strtolower($reg[1]));
4386 $moduletoreloadshort = $reg[1];
4389 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreloadshort.
" with mode ".$reloadmode.
" (generic code)");
4391 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php';
4393 $classname =
'mod'.$moduletoreloadshort;
4394 $mod =
new $classname($db);
4397 $mod->delete_menus();
4398 $mod->init($reloadmode);
4400 dolibarr_install_syslog(
'Failed to include '.DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4402 $res = @
dol_include_once(strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4404 $classname =
'mod'.$moduletoreloadshort;
4405 $mod =
new $classname($db);
4406 $mod->init($reloadmode);
4408 dolibarr_install_syslog(
'Failed to include '.strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4409 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4415 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4420 if (!empty($mod) && is_object($mod)) {
4421 print
'<tr class="trforrunsql"><td colspan="4">';
4422 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: ';
4423 print $langs->trans(
'MigrationReloadModule').
' '.$mod->getName();
4424 print
"<!-- (".$reloadmode.
") -->";
4449 $listofmenuhandler = array();
4452 $listofmenuhandler[
'auguria'] = 1;
4455 foreach ($listofmenuhandler as $key => $val) {
4456 print
'<tr class="trforrunsql"><td colspan="4">';
4460 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: '.$langs->trans(
'MenuHandler').
" ".$key.
"<br>\n";
4463 $dir = DOL_DOCUMENT_ROOT.
"/core/menus/";
4464 $file =
'init_menu_'.$key.
'.sql';
4465 if (file_exists($dir.$file)) {
4466 $result =
run_sql($dir.$file, 1,
'', 1, $key);
4482 global $conf, $db, $langs, $user;
4484 print
'<tr><td colspan="4">';
4486 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4488 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4489 $fuser =
new User($db);
4490 if (!is_object($user)) {
4494 $sql =
"SELECT rowid as uid, entity from ".MAIN_DB_PREFIX.
"user";
4495 $resql = $db->query($sql);
4497 while ($obj = $db->fetch_object($resql)) {
4499 $fuser->id = $obj->uid;
4500 $fuser->entity = $obj->entity;
4503 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4505 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4507 $dir = $conf->user->multidir_output[$entity];
4512 $origin = $dir.
'/'.
get_exdir($fuser->id, 2, 0, 1, $fuser,
'user');
4513 $destin = $dir.
'/'.$fuser->id;
4521 $handle = opendir($origin_osencoded);
4522 if (is_resource($handle)) {
4523 while (($file = readdir($handle)) !==
false) {
4524 if ($file ==
'.' || $file ==
'..') {
4529 $thumbs = opendir($origin_osencoded.
'/'.$file);
4530 if (is_resource($thumbs)) {
4532 while (($thumb = readdir($thumbs)) !==
false) {
4534 if ($thumb ==
'.' || $thumb ==
'..') {
4540 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb, 0, 0);
4550 dol_copy($origin.
'/'.$file, $destin.
'/'.$file, 0, 0);
4571 global $db, $langs, $user;
4573 print
'<tr><td colspan="4">';
4575 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4577 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4578 $fuser =
new User($db);
4579 if (!is_object($user)) {
4583 $sql =
"SELECT rowid as uid, entity, photo from ".MAIN_DB_PREFIX.
"user";
4584 $resql = $db->query($sql);
4586 while ($obj = $db->fetch_object($resql)) {
4588 $fuser->id = $obj->uid;
4589 $fuser->entity = $obj->entity;
4590 $fuser->photo = $obj->photo;
4593 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4595 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4597 $dir = DOL_DATA_ROOT.
'/users';
4602 $origin = $dir.
'/'.$fuser->id;
4603 $destin = $dir.
'/'.$fuser->id.
'/photos';
4611 $handle = opendir($origin_osencoded);
4612 if (is_resource($handle)) {
4613 while (($file = readdir($handle)) !==
false) {
4614 if ($file ==
'.' || $file ==
'..' || $file ==
'photos') {
4617 if (!empty($fuser->photo) && ($file != $fuser->photo && $file !=
'thumbs')) {
4622 $thumbs = opendir($origin_osencoded.
'/'.$file);
4623 if (is_resource($thumbs)) {
4625 while (($thumb = readdir($thumbs)) !==
false) {
4627 if ($thumb ==
'.' || $thumb ==
'..') {
4633 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb, 0, 0);
4642 dol_copy($origin.
'/'.$file, $destin.
'/'.$file, 0, 0);
4679 print
'<tr><td colspan="4">';
4680 $sql =
'SELECT rowid, socialnetworks';
4681 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'user WHERE';
4682 $sql .=
" skype IS NOT NULL OR skype <> ''";
4683 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4684 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4685 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4686 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4687 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4688 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4689 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4690 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4692 $resql = $db->query($sql);
4694 while ($obj = $db->fetch_object($resql)) {
4695 $arraysocialnetworks = array();
4696 if (!empty($obj->skype)) {
4697 $arraysocialnetworks[
'skype'] = $obj->skype;
4699 if (!empty($obj->twitter)) {
4700 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4702 if (!empty($obj->facebook)) {
4703 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4705 if (!empty($obj->linkedin)) {
4706 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4708 if (!empty($obj->instagram)) {
4709 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4711 if (!empty($obj->snapchat)) {
4712 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4714 if (!empty($obj->googleplus)) {
4715 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4717 if (!empty($obj->youtube)) {
4718 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4720 if (!empty($obj->whatsapp)) {
4721 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4723 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4724 $obj->socialnetworks =
'[]';
4726 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4727 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"user SET socialnetworks='".$db->escape(json_encode($socialnetworks,
true)).
"'";
4728 $sqlupd .=
', skype=null';
4729 $sqlupd .=
', twitter=null';
4730 $sqlupd .=
', facebook=null';
4731 $sqlupd .=
', linkedin=null';
4732 $sqlupd .=
', instagram=null';
4733 $sqlupd .=
', snapchat=null';
4734 $sqlupd .=
', googleplus=null';
4735 $sqlupd .=
', youtube=null';
4736 $sqlupd .=
', whatsapp=null';
4737 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4739 $resqlupd = $db->query($sqlupd);
4754 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Users').
"</b><br>\n";
4768 print
'<tr><td colspan="4">';
4771 print
'<tr><td colspan="4">';
4772 $sql =
'SELECT rowid, socialnetworks';
4773 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'adherent WHERE ';
4774 $sql .=
" skype IS NOT NULL OR skype <> ''";
4775 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4776 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4777 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4778 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4779 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4780 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4781 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4782 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4784 $resql = $db->query($sql);
4786 while ($obj = $db->fetch_object($resql)) {
4787 $arraysocialnetworks = array();
4788 if (!empty($obj->skype)) {
4789 $arraysocialnetworks[
'skype'] = $obj->skype;
4791 if (!empty($obj->twitter)) {
4792 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4794 if (!empty($obj->facebook)) {
4795 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4797 if (!empty($obj->linkedin)) {
4798 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4800 if (!empty($obj->instagram)) {
4801 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4803 if (!empty($obj->snapchat)) {
4804 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4806 if (!empty($obj->googleplus)) {
4807 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4809 if (!empty($obj->youtube)) {
4810 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4812 if (!empty($obj->whatsapp)) {
4813 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4815 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4816 $obj->socialnetworks =
'[]';
4818 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4819 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"adherent SET socialnetworks='".$db->escape(json_encode($socialnetworks,
true)).
"'";
4820 $sqlupd .=
', skype=null';
4821 $sqlupd .=
', twitter=null';
4822 $sqlupd .=
', facebook=null';
4823 $sqlupd .=
', linkedin=null';
4824 $sqlupd .=
', instagram=null';
4825 $sqlupd .=
', snapchat=null';
4826 $sqlupd .=
', googleplus=null';
4827 $sqlupd .=
', youtube=null';
4828 $sqlupd .=
', whatsapp=null';
4829 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4831 $resqlupd = $db->query($sqlupd);
4846 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Members').
"</b><br>\n";
4862 print
'<tr><td colspan="4">';
4863 $sql =
'SELECT rowid, socialnetworks';
4864 $sql .=
', jabberid, skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'socpeople WHERE';
4865 $sql .=
" jabberid IS NOT NULL OR jabberid <> ''";
4866 $sql .=
" OR skype IS NOT NULL OR skype <> ''";
4867 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4868 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4869 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4870 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4871 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4872 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4873 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4874 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4876 $resql = $db->query($sql);
4878 while ($obj = $db->fetch_object($resql)) {
4879 $arraysocialnetworks = array();
4880 if (!empty($obj->jabberid)) {
4881 $arraysocialnetworks[
'jabber'] = $obj->jabberid;
4883 if (!empty($obj->skype)) {
4884 $arraysocialnetworks[
'skype'] = $obj->skype;
4886 if (!empty($obj->twitter)) {
4887 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4889 if (!empty($obj->facebook)) {
4890 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4892 if (!empty($obj->linkedin)) {
4893 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4895 if (!empty($obj->instagram)) {
4896 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4898 if (!empty($obj->snapchat)) {
4899 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4901 if (!empty($obj->googleplus)) {
4902 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4904 if (!empty($obj->youtube)) {
4905 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4907 if (!empty($obj->whatsapp)) {
4908 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4910 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4911 $obj->socialnetworks =
'[]';
4913 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4914 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"socpeople SET socialnetworks='".$db->escape(json_encode($socialnetworks,
true)).
"'";
4915 $sqlupd .=
', jabberid=null';
4916 $sqlupd .=
', skype=null';
4917 $sqlupd .=
', twitter=null';
4918 $sqlupd .=
', facebook=null';
4919 $sqlupd .=
', linkedin=null';
4920 $sqlupd .=
', instagram=null';
4921 $sqlupd .=
', snapchat=null';
4922 $sqlupd .=
', googleplus=null';
4923 $sqlupd .=
', youtube=null';
4924 $sqlupd .=
', whatsapp=null';
4925 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4927 $resqlupd = $db->query($sqlupd);
4942 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Contacts').
"</b><br>\n";
4958 print
'<tr><td colspan="4">';
4959 $sql =
'SELECT rowid, socialnetworks';
4960 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'societe WHERE ';
4961 $sql .=
" skype IS NOT NULL OR skype <> ''";
4962 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4963 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4964 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4965 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4966 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4967 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4968 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4969 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4971 $resql = $db->query($sql);
4973 while ($obj = $db->fetch_object($resql)) {
4974 $arraysocialnetworks = array();
4975 if (!empty($obj->skype)) {
4976 $arraysocialnetworks[
'skype'] = $obj->skype;
4978 if (!empty($obj->twitter)) {
4979 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4981 if (!empty($obj->facebook)) {
4982 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4984 if (!empty($obj->linkedin)) {
4985 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4987 if (!empty($obj->instagram)) {
4988 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4990 if (!empty($obj->snapchat)) {
4991 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4993 if (!empty($obj->googleplus)) {
4994 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4996 if (!empty($obj->youtube)) {
4997 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4999 if (!empty($obj->whatsapp)) {
5000 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5002 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5003 $obj->socialnetworks =
'[]';
5005 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5006 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"societe SET socialnetworks='".$db->escape(json_encode($socialnetworks,
true)).
"'";
5007 $sqlupd .=
', skype=null';
5008 $sqlupd .=
', twitter=null';
5009 $sqlupd .=
', facebook=null';
5010 $sqlupd .=
', linkedin=null';
5011 $sqlupd .=
', instagram=null';
5012 $sqlupd .=
', snapchat=null';
5013 $sqlupd .=
', googleplus=null';
5014 $sqlupd .=
', youtube=null';
5015 $sqlupd .=
', whatsapp=null';
5016 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5018 $resqlupd = $db->query($sqlupd);
5033 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Thirdparties').
"</b><br>\n";
5053 print
'<tr class="trforrunsql"><td colspan="4">';
5054 $sql =
'SELECT rowid, field';
5055 if ($mode ==
'export') {
5058 $sql .=
' FROM '.MAIN_DB_PREFIX.$mode.
'_model WHERE';
5059 $sql .=
" type LIKE 'propale_%' OR type LIKE 'commande_%' OR type LIKE 'facture_%'";
5061 $resql = $db->query($sql);
5063 while ($obj = $db->fetch_object($resql)) {
5064 $oldfield = $obj->field;
5065 $newfield = str_replace(array(
',f.facnumber',
'f.facnumber,',
'f.total,',
'f.tva,'), array(
',f.ref',
'f.ref,',
'f.total_ht,',
'f.total_tva,'), $oldfield);
5067 if ($mode ==
'export') {
5068 $oldfilter = $obj->filter;
5069 $newfilter = str_replace(array(
'f.facnumber=',
'f.total=',
'f.tva='), array(
'f.ref=',
'f.total_ht=',
'f.total_tva='), $oldfilter);
5075 if ($oldfield != $newfield || $oldfilter != $newfilter) {
5076 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.$mode.
"_model SET field = '".$db->escape($newfield).
"'";
5077 if ($mode ==
'export') {
5078 $sqlupd .=
", filter = '".$db->escape($newfilter).
"'";
5080 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5081 $resultstring .=
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$sqlupd.
"</td></tr>\n";
5082 $resqlupd = $db->query($sqlupd);
5098 print
'<b>'.$langs->trans(
'MigrationImportOrExportProfiles', $mode).
"</b><br>\n";
5101 if ($resultstring) {
5102 print $resultstring;
5104 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5121 print
'<tr class="trforrunsql"><td colspan="4">';
5122 print
'<b>'.$langs->trans(
'MigrationContractLineRank').
"</b><br>\n";
5124 $sql =
"SELECT c.rowid as cid ,cd.rowid as cdid,cd.rang FROM ".$db->prefix().
"contratdet as cd INNER JOIN ".$db->prefix().
"contrat as c ON c.rowid=cd.fk_contrat AND cd.rang=0";
5125 $sql .=
" ORDER BY c.rowid,cd.rowid";
5127 $resql = $db->query($sql);
5130 $current_contract=0;
5131 while ($obj = $db->fetch_object($resql)) {
5132 if (empty($current_contract) || $current_contract==$obj->cid) {
5138 $sqlUpd =
"UPDATE ".$db->prefix().
"contratdet SET rang=".(int) $currentRank.
" WHERE rowid=".(
int) $obj->cdid;
5139 $resultstring =
'.';
5140 print $resultstring;
5141 $resqlUpd = $db->query($sqlUpd);
5147 $current_contract = $obj->cid;
5160 if (!$resultstring) {
5161 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
run_sql($sqlfile, $silent=1, $entity=0, $usesavepoint=1, $handler='', $okerror='default', $linelengthlimit=32768, $nocommentremoval=0, $offsetforchartofaccount=0, $colspan=0, $onlysqltoimportwebsite=0, $database='')
Launch a sql file.
versioncompare($versionarray1, $versionarray2)
Compare 2 versions (stored into 2 arrays).
Class to manage Blocked Log.
Class to manage line orders.
Class to manage lines of contracts.
Class to manage invoices.
Class to manage invoice lines.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation models.
Class to manage order lines.
Class to manage commercial proposal lines.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
dol_is_file($pathoffile)
Return if path is a file.
dol_copy($srcfile, $destfile, $newmask=0, $overwriteifexists=1, $testvirus=0, $indexdatabase=0)
Copy a file to another file.
dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayreplacement=null, $excludesubdir=0, $excludefileext=null)
Copy a dir to another dir.
dol_is_dir($folder)
Test if filename is a directory.
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
getDoliDBInstance($type, $host, $user, $pass, $name, $port)
Return a DoliDB instance (database handler).
pHeader($subtitle, $next, $action='set', $param='', $forcejqueryurl='', $csstable='main-inside')
Show HTML header of install pages.
pFooter($nonext=0, $setuplang='', $jscheckfunction='', $withpleasewait=0, $morehtml='')
Print HTML footer of install pages.
dolibarr_install_syslog($message, $level=LOG_DEBUG)
Log function for install pages.
calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocaltax1_rate, $uselocaltax2_rate, $remise_percent_global, $price_base_type, $info_bits, $type, $seller='', $localtaxes_array='', $progress=100, $multicurrency_tx=1, $pu_devise=0, $multicurrency_code='')
Calculate totals (net, vat, ...) of a line.
dol_decode($chain, $key='1')
Decode a base 64 encoded + specific delta change.
migrate_links_transfert($db, $langs, $conf)
Function to migrate links into llx_bank_url.
migrate_paiements_orphelins_1($db, $langs, $conf)
Corrige paiement orphelins (liens paumes suite a bugs) Pour verifier s'il reste des orphelins: select...
migrate_user_rights_entity($db, $langs, $conf)
Migrate to add entity value into llx_user_rights.
migrate_reload_modules($db, $langs, $conf, $listofmodule=array(), $force=0)
Disable/Reenable features modules.
migrate_contracts_date3($db, $langs, $conf)
Mise a jour des dates de creation de contrat.
migrate_restore_missing_links($db, $langs, $conf)
Migration du champ fk_remise_except dans llx_facturedet doit correspondre a lien dans llx_societe_rem...
migrate_rename_directories($db, $langs, $conf, $oldname, $newname)
Migration directory.
migrate_project_task_actors($db, $langs, $conf)
Migration de la table llx_projet_task_actors vers llx_element_contact.
migrate_commande_deliveryaddress($db, $langs, $conf)
Migration du champ fk_adresse_livraison dans expedition 2.6 -> 2.7.
if($db->connected) if( $ret) migrate_paiements($db, $langs, $conf)
Reporte liens vers une facture de paiements sur table de jointure (lien n-n paiements factures)
migrate_project_user_resp($db, $langs, $conf)
Migration du champ fk_user_resp de llx_projet vers llx_element_contact.
migrate_contracts_open($db, $langs, $conf)
Reouverture des contrats qui ont au moins une ligne non fermee.
migrate_shipping_delivery($db, $langs, $conf)
Migrate link stored into fk_expedition into llx_element_element.
migrate_delete_old_dir($db, $langs, $conf)
Remove deprecated directories.
migrate_price_propal($db, $langs, $conf)
Update total of proposal lines.
migrate_stocks($db, $langs, $conf)
Migration du champ stock dans produits.
migrate_paiementfourn_facturefourn($db, $langs, $conf)
Factures fournisseurs.
migrate_contacts_socialnetworks()
Migrate contacts fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_customerorder_shipping($db, $langs, $conf)
Migrate order ref_customer and date_delivery fields to llx_expedition.
migrate_detail_livraison($db, $langs, $conf)
Migration des details commandes dans les details livraisons.
migrate_remise_except_entity($db, $langs, $conf)
Migrate to add entity value into llx_societe_remise_except.
migrate_paiements_orphelins_2($db, $langs, $conf)
Corrige paiement orphelins (liens paumes suite a bugs) Pour verifier s'il reste des orphelins: select...
migrate_price_contrat($db, $langs, $conf)
Update total of contract lines.
migrate_users_socialnetworks()
Migrate users fields facebook and co to socialnetworks.
migrate_user_photospath2()
Migrate file from old path users/99/file.jpg into users/99/photos/file.jpg.
migrate_contracts_det($db, $langs, $conf)
Mise a jour des contrats (gestion du contrat + detail de contrat)
migrate_price_facture($db, $langs, $conf)
Update total of invoice lines.
migrate_usergroup_rights_entity($db, $langs, $conf)
Migrate to add entity value into llx_usergroup_rights.
migrate_relationship_tables($db, $langs, $conf, $table, $fk_source, $sourcetype, $fk_target, $targettype)
Migration des tables de relation.
migrate_modeles($db, $langs, $conf)
Mise a jour des modeles selectionnes.
migrate_reset_blocked_log($db, $langs, $conf)
Migrate to reset the blocked log for V7+ algorithm.
migrate_mode_reglement($db, $langs, $conf)
Migrate link stored into fk_mode_reglement.
migrate_export_import_profiles($mode='export')
Migrate export and import profiles to fix field name that was renamed.
migrate_contracts_date2($db, $langs, $conf)
Update contracts with date min real if service date is lower.
migrate_commande_expedition($db, $langs, $conf)
Correspondance des expeditions et des commandes clients dans la table llx_co_exp.
migrate_actioncomm_element($db, $langs, $conf)
Migrate link stored into fk_xxxx into fk_element and elementtype.
migrate_user_photospath()
Migrate file from old path to new one for users.
migrate_thirdparties_socialnetworks()
Migrate thirdparties fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_event_assignement($db, $langs, $conf)
Migrate event assignement to owner.
migrate_clean_association($db, $langs, $conf)
Delete duplicates in table categorie_association.
migrate_commande_livraison($db, $langs, $conf)
Correspondance des livraisons et des commandes clients dans la table llx_co_liv.
migrate_event_assignement_contact($db, $langs, $conf)
Migrate event assignement to owner.
migrate_contracts_date1($db, $langs, $conf)
Mise a jour des date de contrats non renseignees.
migrate_remise_entity($db, $langs, $conf)
Migrate to add entity value into llx_societe_remise.
migrate_contractdet_rank()
Migrate Rank into contract line.
migrate_menus($db, $langs, $conf)
Migration of menus (use only 1 table instead of 3) 2.6 -> 2.7.
migrate_categorie_association($db, $langs, $conf)
Migrate categorie association.
migrate_delete_old_files($db, $langs, $conf)
Delete deprecated files.
migrate_price_commande_fournisseur($db, $langs, $conf)
Update total of purchase order lines.
migrate_element_time($db, $langs, $conf)
Migrate duration in seconds.
migrate_members_socialnetworks()
Migrate members fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_reload_menu($db, $langs, $conf)
Reload SQL menu file (if dynamic menus, if modified by version)
migrate_price_commande($db, $langs, $conf)
Update total of sales order lines.
migrate_shipping_delivery2($db, $langs, $conf)
We try to complete field ref_customer and date_delivery that are empty into llx_livraison.