43define(
'ALLOWED_IF_UPGRADE_UNLOCK_FOUND', 1);
44include_once
'inc.php';
50if (!file_exists($conffile)) {
51 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").';
53require_once $conffile;
54require_once $dolibarr_main_document_root.
'/compta/facture/class/facture.class.php';
55require_once $dolibarr_main_document_root.
'/comm/propal/class/propal.class.php';
56require_once $dolibarr_main_document_root.
'/contrat/class/contrat.class.php';
57require_once $dolibarr_main_document_root.
'/commande/class/commande.class.php';
58require_once $dolibarr_main_document_root.
'/fourn/class/fournisseur.commande.class.php';
59require_once $dolibarr_main_document_root.
'/core/lib/price.lib.php';
60require_once $dolibarr_main_document_root.
'/core/class/menubase.class.php';
61require_once $dolibarr_main_document_root.
'/core/lib/admin.lib.php';
62require_once $dolibarr_main_document_root.
'/core/lib/files.lib.php';
77$err = error_reporting();
80 @set_time_limit((
int) $conf->global->MAIN_OVERRIDE_TIME_LIMIT);
86$setuplang =
GETPOST(
"selectlang",
'aZ09', 3) ?
GETPOST(
"selectlang",
'aZ09', 3) :
'auto';
87$langs->setDefaultLang($setuplang);
88$versionfrom =
GETPOST(
"versionfrom",
'alpha', 3) ?
GETPOST(
"versionfrom",
'alpha', 3) : (empty($argv[1]) ?
'' : $argv[1]);
89$versionto =
GETPOST(
"versionto",
'alpha', 3) ?
GETPOST(
"versionto",
'alpha', 3) : (empty($argv[2]) ?
'' : $argv[2]);
90$enablemodules =
GETPOST(
"enablemodules",
'alpha', 3) ?
GETPOST(
"enablemodules",
'alpha', 3) : (empty($argv[3]) ?
'' : $argv[3]);
92$langs->loadLangs(array(
"admin",
"install",
"bills",
"suppliers"));
94if ($dolibarr_main_db_type ==
'mysqli') {
97if ($dolibarr_main_db_type ==
'pgsql') {
100if ($dolibarr_main_db_type ==
'mssql') {
105dolibarr_install_syslog(
"--- upgrade2: entering upgrade2.php page ".$versionfrom.
" ".$versionto.
" ".$enablemodules);
106if (!is_object($conf)) {
116if ((!$versionfrom || preg_match(
'/version/', $versionfrom)) && (!$versionto || preg_match(
'/version/', $versionto))) {
117 print
'Error: Parameter versionfrom or versionto missing or having a bad format.'.
"\n";
118 print
'Upgrade must be ran from command line with parameters or called from page install/index.php (like a first install)'.
"\n";
120 $sapi_type = php_sapi_name();
121 $script_file = basename(__FILE__);
123 if (substr($sapi_type, 0, 3) ==
'cli') {
124 print
'Syntax from command line: '.$script_file.
" x.y.z a.b.c [MAIN_MODULE_NAME1_TO_ENABLE,MAIN_MODULE_NAME2_TO_ENABLE...]\n";
129pHeader(
'',
'step5',
GETPOST(
'action',
'aZ09') ?
GETPOST(
'action',
'aZ09') :
'upgrade',
'versionfrom='.$versionfrom.
'&versionto='.$versionto,
'',
'main-inside main-inside-borderbottom');
132if (!
GETPOST(
'action',
'aZ09') || preg_match(
'/upgrade/i',
GETPOST(
'action',
'aZ09'))) {
133 print
'<h3><img class="valignmiddle inline-block paddingright" src="../theme/common/octicons/build/svg/database.svg" width="20" alt="Database"> ';
134 print
'<span class="inline-block">'.$langs->trans(
'DataMigration').
'</span></h3>';
136 print
'<table border="0" width="100%">';
139 if ((!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) || !empty($dolibarr_main_db_encrypted_pass)) {
140 require_once $dolibarr_main_document_root.
'/core/lib/security.lib.php';
141 if (!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) {
142 $dolibarr_main_db_pass = preg_replace(
'/crypted:/i',
'', $dolibarr_main_db_pass);
143 $dolibarr_main_db_pass =
dol_decode($dolibarr_main_db_pass);
144 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
146 $dolibarr_main_db_pass =
dol_decode($dolibarr_main_db_encrypted_pass);
151 $conf->db->type = $dolibarr_main_db_type;
152 $conf->db->host = $dolibarr_main_db_host;
153 $conf->db->port = $dolibarr_main_db_port;
154 $conf->db->name = $dolibarr_main_db_name;
155 $conf->db->user = $dolibarr_main_db_user;
156 $conf->db->pass = $dolibarr_main_db_pass;
158 $db =
getDoliDBInstance($conf->db->type, $conf->db->host, $conf->db->user, $conf->db->pass, $conf->db->name, (
int) $conf->db->port);
160 if (!$db->connected) {
161 print
'<tr><td colspan="4">'.$langs->trans(
"ErrorFailedToConnectToDatabase", $conf->db->name).
'</td><td class="right">'.$langs->trans(
'Error').
'</td></tr>';
162 dolibarr_install_syslog(
'upgrade2: failed to connect to database :'.$conf->db->name.
' on '.$conf->db->host.
' for user '.$conf->db->user, LOG_ERR);
167 if ($db->database_selected) {
174 if (empty($dolibarr_main_db_encryption)) {
175 $dolibarr_main_db_encryption = 0;
177 $conf->db->dolibarr_main_db_encryption = $dolibarr_main_db_encryption;
178 if (empty($dolibarr_main_db_cryptkey)) {
179 $dolibarr_main_db_cryptkey =
'';
181 $conf->db->dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey;
184 $conf->setValues($db);
187 $listofentities = array(1);
190 include_once DOL_DOCUMENT_ROOT.
'/core/class/hookmanager.class.php';
192 $hookmanager->initHooks(array(
'upgrade2'));
194 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto);
197 $reshook = $hookmanager->executeHooks(
'doUpgradeBefore', $parameters,
$object, $action);
198 if ($reshook >= 0 && is_array($hookmanager->resArray)) {
200 $listofentities = array_unique(array_merge($listofentities, $hookmanager->resArray));
211 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN birth date';
213 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemployment date';
215 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemploymentend date';
217 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_range integer';
219 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_c_exp_tax_cat integer';
221 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN langs varchar(24)';
223 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fieldcomputed text';
225 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fielddefault varchar(255)';
227 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
"extrafields ADD COLUMN enabled varchar(255) DEFAULT '1'";
229 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN help text';
231 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user_rights ADD COLUMN entity integer DEFAULT 1 NOT NULL';
237 foreach ($listofentities as $entity) {
238 dol_syslog(
"Process upgrade2 for entity ".$entity);
241 $conf->setEntityValues($db, $entity);
244 if (defined(
'SYSLOG_FILE')) {
245 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
247 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
250 if (count($listofentities) > 1) {
251 print
'<tr><td colspan="4">*** '.$langs->trans(
"Entity").
' '.$entity.
'</td></tr>'.
"\n";
256 $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 :
''));
262 $versiontoarray = explode(
'.', $versionto);
263 $versionranarray = explode(
'.', DOL_VERSION);
265 $afterversionarray = explode(
'.',
'2.0.0');
266 $beforeversionarray = explode(
'.',
'2.7.9');
268 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
329 $afterversionarray = explode(
'.',
'2.7.9');
330 $beforeversionarray = explode(
'.',
'2.8.9');
333 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
357 $afterversionarray = explode(
'.',
'2.8.9');
358 $beforeversionarray = explode(
'.',
'2.9.9');
360 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
372 $afterversionarray = explode(
'.',
'2.9.9');
373 $beforeversionarray = explode(
'.',
'3.0.9');
379 $afterversionarray = explode(
'.',
'3.0.9');
380 $beforeversionarray = explode(
'.',
'3.1.9');
382 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
390 $afterversionarray = explode(
'.',
'3.1.9');
391 $beforeversionarray = explode(
'.',
'3.2.9');
393 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
403 $afterversionarray = explode(
'.',
'3.2.9');
404 $beforeversionarray = explode(
'.',
'3.3.9');
406 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
415 $afterversionarray = explode(
'.',
'3.6.9');
416 $beforeversionarray = explode(
'.',
'3.7.9');
418 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
424 $afterversionarray = explode(
'.',
'3.7.9');
425 $beforeversionarray = explode(
'.',
'3.8.9');
431 $afterversionarray = explode(
'.',
'3.9.9');
432 $beforeversionarray = explode(
'.',
'4.0.9');
434 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
440 $afterversionarray = explode(
'.',
'4.0.9');
441 $beforeversionarray = explode(
'.',
'5.0.9');
443 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
453 $afterversionarray = explode(
'.',
'5.0.9');
454 $beforeversionarray = explode(
'.',
'6.0.9');
456 if (isModEnabled(
'multicompany')) {
457 global $multicompany_transverse_mode;
460 if (empty($multicompany_transverse_mode)) {
461 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
473 $afterversionarray = explode(
'.',
'6.0.9');
474 $beforeversionarray = explode(
'.',
'7.0.9');
476 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
485 $afterversionarray = explode(
'.',
'7.0.9');
486 $beforeversionarray = explode(
'.',
'8.0.9');
488 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
494 $afterversionarray = explode(
'.',
'8.0.9');
495 $beforeversionarray = explode(
'.',
'9.0.9');
501 $afterversionarray = explode(
'.',
'10.0.9');
502 $beforeversionarray = explode(
'.',
'11.0.9');
504 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
513 $afterversionarray = explode(
'.',
'13.0.9');
514 $beforeversionarray = explode(
'.',
'14.0.9');
516 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
523 $afterversionarray = explode(
'.',
'15.0.9');
524 $beforeversionarray = explode(
'.',
'16.0.9');
526 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
533 $afterversionarray = explode(
'.',
'16.0.9');
534 $beforeversionarray = explode(
'.',
'17.0.9');
536 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
542 $afterversionarray = explode(
'.',
'17.0.9');
543 $beforeversionarray = explode(
'.',
'18.0.9');
545 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
560 $afterversionarray = explode(
'.',
'19.0.9');
561 $beforeversionarray = explode(
'.',
'20.0.9');
569 dol_syslog(
"Run migrate_... if migration is LAST ONE");
572 $listofmodule = array(
573 'MAIN_MODULE_ACCOUNTING' =>
'newboxdefonly',
574 'MAIN_MODULE_AGENDA' =>
'newboxdefonly',
575 'MAIN_MODULE_BOM' =>
'menuonly',
576 'MAIN_MODULE_BANQUE' =>
'menuonly',
577 'MAIN_MODULE_BARCODE' =>
'newboxdefonly',
578 'MAIN_MODULE_CRON' =>
'newboxdefonly',
579 'MAIN_MODULE_COMMANDE' =>
'newboxdefonly',
580 'MAIN_MODULE_BLOCKEDLOG' =>
'noboxes',
581 'MAIN_MODULE_DEPLACEMENT' =>
'newboxdefonly',
582 'MAIN_MODULE_DON' =>
'newboxdefonly',
583 'MAIN_MODULE_ECM' =>
'newboxdefonly',
584 'MAIN_MODULE_EXTERNALSITE' =>
'newboxdefonly',
585 'MAIN_MODULE_EXPENSEREPORT' =>
'newboxdefonly',
586 'MAIN_MODULE_FACTURE' =>
'newboxdefonly',
587 'MAIN_MODULE_FOURNISSEUR' =>
'newboxdefonly',
588 'MAIN_MODULE_FICHEINTER' =>
'newboxdefonly',
589 'MAIN_MODULE_HOLIDAY' =>
'newboxdefonly',
590 'MAIN_MODULE_LOAN' =>
'newboxdefonly',
591 'MAIN_MODULE_MARGIN' =>
'menuonly',
592 'MAIN_MODULE_MRP' =>
'menuonly',
593 'MAIN_MODULE_OPENSURVEY' =>
'newboxdefonly',
594 'MAIN_MODULE_PAYBOX' =>
'newboxdefonly',
595 'MAIN_MODULE_PRINTING' =>
'newboxdefonly',
596 'MAIN_MODULE_PRODUIT' =>
'newboxdefonly',
597 'MAIN_MODULE_RECRUITMENT' =>
'menuonly',
598 'MAIN_MODULE_RESOURCE' =>
'noboxes',
599 'MAIN_MODULE_SALARIES' =>
'newboxdefonly',
600 'MAIN_MODULE_SERVICE' =>
'newboxdefonly',
601 'MAIN_MODULE_SYSLOG' =>
'newboxdefonly',
602 'MAIN_MODULE_SOCIETE' =>
'newboxdefonly',
603 'MAIN_MODULE_STRIPE' =>
'menuonly',
604 'MAIN_MODULE_TICKET' =>
'newboxdefonly',
605 'MAIN_MODULE_TAKEPOS' =>
'newboxdefonly',
606 'MAIN_MODULE_USER' =>
'newboxdefonly',
607 'MAIN_MODULE_VARIANTS' =>
'newboxdefonly',
608 'MAIN_MODULE_WEBSITE' =>
'newboxdefonly',
625 if (!$error && $enablemodules) {
627 $listofmodules = array();
628 $enablemodules = preg_replace(
'/enablemodules=/',
'', $enablemodules);
629 $tmplistofmodules = explode(
',', $enablemodules);
630 foreach ($tmplistofmodules as $value) {
631 $listofmodules[$value] =
'forceactivate';
635 if ($resultreloadmodules < 0) {
643 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' => $conf);
646 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterDB', $parameters,
$object, $action);
647 if ($hookmanager->resNbOfHooks > 0) {
649 print
'<tr><td colspan="4">';
650 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
651 print $hookmanager->error;
652 print
"<!-- (".$reshook.
") -->";
655 print
'<tr class="trforrunsql"><td colspan="4">';
656 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (DB)</b>: <span class="ok">OK</span>';
657 print
"<!-- (".$reshook.
") -->";
662 if (!empty($conf->modules_parts[
'hooks'])) {
663 print
'<tr class="trforrunsql"><td colspan="4">';
664 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterDB");
675 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"const SET VALUE = 'torefresh' WHERE name = 'MAIN_FIRST_PING_OK_ID'";
690 foreach ($listofentities as $entity) {
692 $conf->setEntityValues($db, $entity);
694 if (defined(
'SYSLOG_FILE')) {
695 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
697 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
701 $srcroot = DOL_DOCUMENT_ROOT.
'/install/medias';
702 $destroot = DOL_DATA_ROOT.
'/medias';
715 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' => $conf);
718 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterFiles', $parameters,
$object, $action);
719 if ($hookmanager->resNbOfHooks > 0) {
721 print
'<tr><td colspan="4">';
722 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
723 print $hookmanager->error;
724 print
"<!-- (".$reshook.
") -->";
727 print
'<tr class="trforrunsql"><td colspan="4">';
728 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (Files)</b>: <span class="ok">OK</span>';
729 print
"<!-- (".$reshook.
") -->";
734 if (!empty($conf->modules_parts[
'hooks'])) {
735 print
'<tr class="trforrunsql"><td colspan="4">';
736 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterFiles");
746 print
'<table width="100%">';
747 print
'<tr><td style="width: 30%">'.$langs->trans(
"MigrationFinished").
'</td>';
748 print
'<td class="right">';
752 print
'<span class="error">'.$langs->trans(
"Error").
'</span> - ';
756 print
'<script type="text/javascript">
757 jQuery(document).ready(function() {
758 function init_trrunsql()
760 console.log("toggle .trforrunsql");
761 jQuery(".trforrunsql").toggle();
764 jQuery(".trforrunsqlshowhide").click(function() {
769 print
'<a class="trforrunsqlshowhide" href="#">'.$langs->trans(
"ShowHideDetails").
'</a>';
772 print
'</td></tr>'.
"\n";
778 print
'<div class="error">'.$langs->trans(
'ErrorWrongParameters').
'</div>';
783if ($error && isset($argv[1])) {
789pFooter($error ? 2 : 0, $setuplang);
812 print
'<tr><td colspan="4">';
815 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
817 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
818 $obj = $db->fetch_object($result);
820 $sql =
"SELECT p.rowid, p.fk_facture, p.amount";
821 $sql .=
" FROM ".MAIN_DB_PREFIX.
"paiement as p";
822 $sql .=
" WHERE p.fk_facture > 0";
824 $resql = $db->query($sql);
830 $num = $db->num_rows($resql);
833 $obj = $db->fetch_object($resql);
834 $row[$i][0] = $obj->rowid;
835 $row[$i][1] = $obj->fk_facture;
836 $row[$i][2] = $obj->amount;
844 print $langs->trans(
'MigrationPaymentsNumberToUpdate', $num).
"<br>\n";
848 for ($i = 0; $i < $num; $i++) {
849 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
850 $sql .=
" VALUES (".((int) $row[$i][1]).
",".((int) $row[$i][0]).
",".((float) $row[$i][2]).
")";
852 $res += $db->query($sql);
854 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET fk_facture = 0 WHERE rowid = ".((int) $row[$i][0]);
856 $res += $db->query($sql);
858 print $langs->trans(
'MigrationProcessPaymentUpdate', $row[$i][0]).
"<br>\n";
862 if ($res == (2 * count($row))) {
864 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
867 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
870 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
873 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
891 print
'<tr><td colspan="4">';
894 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
896 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
897 $obj = $db->fetch_object($result);
900 $sql =
"SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
901 $sql .=
" bu2.url_id as socid";
902 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
903 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
904 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')";
905 $sql .=
" WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid";
906 $sql .=
" AND b.rappro = 1";
907 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
909 $resql = $db->query($sql);
915 $num = $db->num_rows($resql);
918 $obj = $db->fetch_object($resql);
919 if ($obj->pamount == $obj->bamount && $obj->socid) {
920 $row[$j][
'paymentid'] = $obj->rowid;
921 $row[$j][
'pamount'] = $obj->pamount;
922 $row[$j][
'fk_bank'] = $obj->fk_bank;
923 $row[$j][
'bamount'] = $obj->bamount;
924 $row[$j][
'socid'] = $obj->socid;
925 $row[$j][
'datec'] = $obj->datec;
935 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 1).
': '.count($row).
"<br>\n";
940 for ($i = 0; $i < $num; $i++) {
942 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>';
946 $sql =
" SELECT distinct f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
947 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
948 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
949 $sql .=
" AND pf.fk_facture IS NULL";
950 $sql .=
" ORDER BY f.fk_statut";
952 $resql = $db->query($sql);
954 $num = $db->num_rows($resql);
957 $obj = $db->fetch_object($resql);
958 $facid = $obj->rowid;
960 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
961 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
963 $res += $db->query($sql);
965 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
973 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
975 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
980 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
983 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1001 print
'<tr><td colspan="4">';
1004 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
1006 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
1007 $obj = $db->fetch_object($result);
1010 $sql =
"SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1011 $sql .=
" bu2.url_id as socid";
1012 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1013 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1014 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')";
1015 $sql .=
" WHERE pf.rowid IS NULL AND (p.fk_bank = bu.fk_bank AND bu.type = 'payment') AND bu.fk_bank = b.rowid";
1016 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1018 $resql = $db->query($sql);
1024 $num = $db->num_rows($resql);
1027 $obj = $db->fetch_object($resql);
1028 if ($obj->pamount == $obj->bamount && $obj->socid) {
1029 $row[$j][
'paymentid'] = $obj->rowid;
1030 $row[$j][
'pamount'] = $obj->pamount;
1031 $row[$j][
'fk_bank'] = $obj->fk_bank;
1032 $row[$j][
'bamount'] = $obj->bamount;
1033 $row[$j][
'socid'] = $obj->socid;
1034 $row[$j][
'datec'] = $obj->datec;
1047 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 2).
': '.count($row).
"<br>\n";
1051 for ($i = 0; $i < $num; $i++) {
1053 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>';
1057 $sql =
" SELECT distinct f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1058 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1059 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1060 $sql .=
" AND pf.fk_facture IS NULL";
1061 $sql .=
" ORDER BY f.fk_statut";
1063 $resql = $db->query($sql);
1065 $num = $db->num_rows($resql);
1068 $obj = $db->fetch_object($resql);
1069 $facid = $obj->rowid;
1071 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1072 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1074 $res += $db->query($sql);
1076 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1085 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1087 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1092 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1098 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiement DROP COLUMN fk_facture";
1108 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1125 print
'<tr><td colspan="4">';
1130 print
'<b>'.$langs->trans(
'MigrationContractsUpdate').
"</b><br>\n";
1132 $sql =
"SELECT c.rowid as cref, c.date_contrat, c.statut, c.fk_product, c.fk_facture, c.fk_user_author,";
1133 $sql .=
" p.ref, p.label, p.description, p.price, p.tva_tx, p.duration, cd.rowid";
1134 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c";
1135 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p";
1136 $sql .=
" ON c.fk_product = p.rowid";
1137 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"contratdet as cd";
1138 $sql .=
" ON c.rowid=cd.fk_contrat";
1139 $sql .=
" WHERE cd.rowid IS NULL AND p.rowid IS NOT NULL";
1140 $resql = $db->query($sql);
1146 $num = $db->num_rows($resql);
1149 print $langs->trans(
'MigrationContractsNumberToUpdate', $num).
"<br>\n";
1153 $obj = $db->fetch_object($resql);
1155 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"contratdet (";
1156 $sql .=
"fk_contrat, fk_product, statut, label, description,";
1157 $sql .=
"date_ouverture_prevue, date_ouverture, date_fin_validite, tva_tx, qty,";
1158 $sql .=
"subprice, price_ht, fk_user_author, fk_user_ouverture)";
1159 $sql .=
" VALUES (";
1160 $sql .= ((int) $obj->cref).
", ".($obj->fk_product ? ((int) $obj->fk_product) : 0).
", ";
1162 $sql .=
"'".$db->escape($obj->label).
"', null, ";
1163 $sql .= ($obj->date_contrat ?
"'".$db->idate($db->jdate($obj->date_contrat)).
"'" :
"null").
", ";
1166 $sql .= ((float) $obj->tva_tx).
", 1, ";
1167 $sql .= ((float) $obj->price).
", ".((float) $obj->price).
", ".((int) $obj->fk_user_author).
",";
1171 if ($db->query($sql)) {
1172 print $langs->trans(
'MigrationContractsLineCreation', $obj->cref).
"<br>\n";
1184 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1187 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1190 print $langs->trans(
'MigrationContractsNothingToUpdate').
"<br>\n";
1193 print $langs->trans(
'MigrationContractsFieldDontExist').
"<br>\n";
1210 print
'<tr><td colspan="4">';
1215 print
'<b>'.$langs->trans(
'MigrationBankTransfertsUpdate').
"</b><br>\n";
1217 $sql =
"SELECT ba.rowid as barowid, bb.rowid as bbrowid";
1218 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as bb, ".MAIN_DB_PREFIX.
"bank as ba";
1219 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu ON bu.fk_bank = ba.rowid";
1220 $sql .=
" WHERE ba.amount = -bb.amount AND ba.fk_account <> bb.fk_account";
1221 $sql .=
" AND ba.datev = bb.datev AND ba.datec = bb.datec";
1222 $sql .=
" AND bu.fk_bank IS NULL";
1223 $resql = $db->query($sql);
1229 $num = $db->num_rows($resql);
1232 print $langs->trans(
'MigrationBankTransfertsToUpdate', $num).
"<br>\n";
1236 $obj = $db->fetch_object($resql);
1238 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"bank_url (";
1239 $sql .=
"fk_bank, url_id, url, label, type";
1241 $sql .=
" VALUES (";
1242 $sql .= $obj->barowid.
",".$obj->bbrowid.
", '/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'";
1248 if (!$db->query($sql)) {
1259 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1262 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1265 print $langs->trans(
'MigrationBankTransfertsNothingToUpdate').
"<br>\n";
1284 print
'<tr><td colspan="4">';
1287 print
'<b>'.$langs->trans(
'MigrationContractsEmptyDatesUpdate').
"</b><br>\n";
1289 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set date_contrat=tms where date_contrat is null";
1291 $resql = $db->query($sql);
1295 if ($db->affected_rows($resql) > 0) {
1296 print $langs->trans(
'MigrationContractsEmptyDatesUpdateSuccess').
"<br>\n";
1298 print $langs->trans(
'MigrationContractsEmptyDatesNothingToUpdate').
"<br>\n";
1301 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=tms where datec is null";
1303 $resql = $db->query($sql);
1307 if ($db->affected_rows($resql) > 0) {
1308 print $langs->trans(
'MigrationContractsEmptyCreationDatesUpdateSuccess').
"<br>\n";
1310 print $langs->trans(
'MigrationContractsEmptyCreationDatesNothingToUpdate').
"<br>\n";
1326 print
'<tr><td colspan="4">';
1331 print
'<b>'.$langs->trans(
'MigrationContractsInvalidDatesUpdate').
"</b><br>\n";
1333 $sql =
"SELECT c.rowid as cref, c.datec, c.date_contrat, MIN(cd.date_ouverture) as datemin";
1334 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c,";
1335 $sql .=
" ".MAIN_DB_PREFIX.
"contratdet as cd";
1336 $sql .=
" WHERE c.rowid=cd.fk_contrat AND cd.date_ouverture IS NOT NULL";
1337 $sql .=
" GROUP BY c.rowid, c.date_contrat";
1338 $resql = $db->query($sql);
1344 $num = $db->num_rows($resql);
1347 $nbcontratsmodifie = 0;
1351 $obj = $db->fetch_object($resql);
1352 if ($obj->date_contrat > $obj->datemin) {
1353 $datemin = $db->jdate($obj->datemin);
1355 print $langs->trans(
'MigrationContractsInvalidDateFix', $obj->cref, $obj->date_contrat, $obj->datemin).
"<br>\n";
1356 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1357 $sql .=
" SET date_contrat='".$db->idate($datemin).
"'";
1358 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1359 $resql2 = $db->query($sql);
1364 $nbcontratsmodifie++;
1371 if ($nbcontratsmodifie) {
1372 print $langs->trans(
'MigrationContractsInvalidDatesNumber', $nbcontratsmodifie).
"<br>\n";
1374 print $langs->trans(
'MigrationContractsInvalidDatesNothingToUpdate').
"<br>\n";
1394 print
'<tr><td colspan="4">';
1397 print
'<b>'.$langs->trans(
'MigrationContractsIncoherentCreationDateUpdate').
"</b><br>\n";
1399 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=date_contrat where datec is null or datec > date_contrat";
1401 $resql = $db->query($sql);
1405 if ($db->affected_rows($resql) > 0) {
1406 print $langs->trans(
'MigrationContractsIncoherentCreationDateUpdateSuccess').
"<br>\n";
1408 print $langs->trans(
'MigrationContractsIncoherentCreationDateNothingToUpdate').
"<br>\n";
1424 print
'<tr><td colspan="4">';
1427 print
'<b>'.$langs->trans(
'MigrationReopeningContracts').
"</b><br>\n";
1429 $sql =
"SELECT c.rowid as cref FROM ".MAIN_DB_PREFIX.
"contrat as c, ".MAIN_DB_PREFIX.
"contratdet as cd";
1430 $sql .=
" WHERE cd.statut = 4 AND c.statut=2 AND c.rowid=cd.fk_contrat";
1432 $resql = $db->query($sql);
1436 if ($db->affected_rows($resql) > 0) {
1439 $num = $db->num_rows($resql);
1442 $nbcontratsmodifie = 0;
1446 $obj = $db->fetch_object($resql);
1448 print $langs->trans(
'MigrationReopenThisContract', $obj->cref).
"<br>\n";
1449 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1450 $sql .=
" SET statut = 1";
1451 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1452 $resql2 = $db->query($sql);
1457 $nbcontratsmodifie++;
1464 if ($nbcontratsmodifie) {
1465 print $langs->trans(
'MigrationReopenedContractsNumber', $nbcontratsmodifie).
"<br>\n";
1467 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1471 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1489 print
'<tr><td colspan="4">';
1491 print
'<b>'.$langs->trans(
'SuppliersInvoices').
"</b><br>\n";
1494 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiementfourn",
"fk_facture_fourn");
1495 $obj = $db->fetch_object($result);
1500 $select_sql =
'SELECT rowid, fk_facture_fourn, amount';
1501 $select_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn';
1502 $select_sql .=
' WHERE fk_facture_fourn IS NOT NULL';
1505 $select_resql = $db->query($select_sql);
1506 if ($select_resql) {
1507 $select_num = $db->num_rows($select_resql);
1511 while (($i < $select_num) && (!$error)) {
1512 $select_obj = $db->fetch_object($select_resql);
1515 $check_sql =
'SELECT fk_paiementfourn, fk_facturefourn';
1516 $check_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn';
1517 $check_sql .=
' WHERE fk_paiementfourn = '.((int) $select_obj->rowid).
' AND fk_facturefourn = '.((int) $select_obj->fk_facture_fourn);
1518 $check_resql = $db->query($check_sql);
1520 $check_num = $db->num_rows($check_resql);
1521 if ($check_num == 0) {
1525 print
'<tr><td colspan="4" class="nowrap"><b>'.$langs->trans(
'SuppliersInvoices').
'</b></td></tr>';
1526 print
'<tr><td>fk_paiementfourn</td><td>fk_facturefourn</td><td>'.$langs->trans(
'Amount').
'</td><td> </td></tr>';
1529 print
'<tr class="oddeven">';
1530 print
'<td>'.$select_obj->rowid.
'</td><td>'.$select_obj->fk_facture_fourn.
'</td><td>'.$select_obj->amount.
'</td>';
1532 $insert_sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn SET ';
1533 $insert_sql .=
' fk_paiementfourn = \''.$select_obj->rowid.
'\',
';
1534 $insert_sql .= ' fk_facturefourn = \
''.$select_obj->fk_facture_fourn.
'\',
';
1535 $insert_sql .= ' amount = \
''.$select_obj->amount.
'\'';
1536 $insert_resql = $db->query($insert_sql);
1538 if ($insert_resql) {
1540 print
'<td><span class="ok">'.$langs->trans(
"OK").
'</span></td>';
1542 print
'<td><span class="error">Error on insert</span></td>';
1558 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1562 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiementfourn DROP COLUMN fk_facture_fourn";
1565 print
'<tr><td>'.$langs->trans(
"Error").
'</td></tr>';
1569 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1586 $tmpmysoc->setMysoc($conf);
1590 print
'<tr><td colspan="4">';
1593 print
'<b>'.$langs->trans(
'MigrationInvoice').
"</b><br>\n";
1596 $sql =
"SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as vatrate, fd.total_ttc, fd.info_bits,";
1597 $sql .=
" f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f";
1598 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facturedet as fd, ".MAIN_DB_PREFIX.
"facture as f";
1599 $sql .=
" WHERE fd.fk_facture = f.rowid";
1600 $sql .=
" AND (((fd.total_ttc = 0 AND fd.remise_percent != 100) or fd.total_ttc IS NULL) or f.total_ttc IS NULL)";
1604 $resql = $db->query($sql);
1606 $num = $db->num_rows($resql);
1610 $obj = $db->fetch_object($resql);
1612 $rowid = $obj->rowid;
1614 $pu = $obj->subprice;
1615 $vatrate = $obj->vatrate;
1616 $remise_percent = $obj->remise_percent;
1617 $remise_percent_global = $obj->remise_percent_global;
1618 $total_ttc_f = $obj->total_ttc_f;
1619 $info_bits = $obj->info_bits;
1623 $facligne->fetch($rowid);
1625 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $facligne->product_type, $tmpmysoc);
1626 $total_ht = $result[0];
1627 $total_tva = $result[1];
1628 $total_ttc = $result[2];
1630 $facligne->total_ht = $total_ht;
1631 $facligne->total_tva = $total_tva;
1632 $facligne->total_ttc = $total_ttc;
1634 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);
1636 $facligne->update_total();
1640 if (!$total_ttc_f) {
1642 $facture->id = $obj->facid;
1644 if ($facture->fetch($facture->id) >= 0) {
1645 if ($facture->update_price() > 0) {
1648 print
"Error id=".$facture->id;
1661 print $langs->trans(
"AlreadyDone");
1667 print
"Error #1 ".$db->error();
1689 $tmpmysoc->setMysoc($conf);
1693 print
'<tr><td colspan="4">';
1696 print
'<b>'.$langs->trans(
'MigrationProposal').
"</b><br>\n";
1699 $sql =
"SELECT pd.rowid, pd.qty, pd.subprice, pd.remise_percent, pd.tva_tx as vatrate, pd.info_bits,";
1700 $sql .=
" p.rowid as propalid, p.remise_percent as remise_percent_global";
1701 $sql .=
" FROM ".MAIN_DB_PREFIX.
"propaldet as pd, ".MAIN_DB_PREFIX.
"propal as p";
1702 $sql .=
" WHERE pd.fk_propal = p.rowid";
1703 $sql .=
" AND ((pd.total_ttc = 0 AND pd.remise_percent != 100) or pd.total_ttc IS NULL)";
1706 $resql = $db->query($sql);
1708 $num = $db->num_rows($resql);
1712 $obj = $db->fetch_object($resql);
1714 $rowid = $obj->rowid;
1716 $pu = $obj->subprice;
1717 $vatrate = $obj->vatrate;
1718 $remise_percent = $obj->remise_percent;
1719 $remise_percent_global = $obj->remise_percent_global;
1720 $info_bits = $obj->info_bits;
1724 $propalligne->fetch($rowid);
1726 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $propalligne->product_type, $tmpmysoc);
1727 $total_ht = $result[0];
1728 $total_tva = $result[1];
1729 $total_ttc = $result[2];
1731 $propalligne->total_ht = $total_ht;
1732 $propalligne->total_tva = $total_tva;
1733 $propalligne->total_ttc = $total_ttc;
1735 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);
1737 $propalligne->update_total();
1742 print $langs->trans(
"AlreadyDone");
1749 print
"Error #1 ".$db->error();
1772 $tmpmysoc->setMysoc($conf);
1773 if (empty($tmpmysoc->country_id)) {
1774 $tmpmysoc->country_id = 0;
1777 print
'<tr><td colspan="4">';
1780 print
'<b>'.$langs->trans(
'MigrationContract').
"</b><br>\n";
1783 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1784 $sql .=
" c.rowid as contratid";
1785 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd, ".MAIN_DB_PREFIX.
"contrat as c";
1786 $sql .=
" WHERE cd.fk_contrat = c.rowid";
1787 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100 AND cd.subprice > 0) or cd.total_ttc IS NULL)";
1790 $resql = $db->query($sql);
1792 $num = $db->num_rows($resql);
1796 $obj = $db->fetch_object($resql);
1798 $rowid = $obj->rowid;
1800 $pu = $obj->subprice;
1801 $vatrate = $obj->vatrate;
1802 $remise_percent = $obj->remise_percent;
1803 $info_bits = $obj->info_bits;
1808 $contratligne->fetch($rowid);
1810 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, 0,
'HT', $info_bits, $contratligne->product_type, $tmpmysoc);
1811 $total_ht = $result[0];
1812 $total_tva = $result[1];
1813 $total_ttc = $result[2];
1815 $contratligne->total_ht = $total_ht;
1816 $contratligne->total_tva = $total_tva;
1817 $contratligne->total_ttc = $total_ttc;
1819 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);
1821 $contratligne->update_total();
1826 print $langs->trans(
"AlreadyDone");
1833 print
"Error #1 ".$db->error();
1856 $tmpmysoc->setMysoc($conf);
1858 print
'<tr><td colspan="4">';
1861 print
'<b>'.$langs->trans(
'MigrationOrder').
"</b><br>\n";
1864 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1865 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1866 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"commande as c";
1867 $sql .=
" WHERE cd.fk_commande = c.rowid";
1868 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1871 $resql = $db->query($sql);
1873 $num = $db->num_rows($resql);
1877 $obj = $db->fetch_object($resql);
1879 $rowid = $obj->rowid;
1881 $pu = $obj->subprice;
1882 $vatrate = $obj->vatrate;
1883 $remise_percent = $obj->remise_percent;
1884 $remise_percent_global = $obj->remise_percent_global;
1885 $info_bits = $obj->info_bits;
1889 $commandeligne->fetch($rowid);
1891 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $tmpmysoc);
1892 $total_ht = $result[0];
1893 $total_tva = $result[1];
1894 $total_ttc = $result[2];
1896 $commandeligne->total_ht = $total_ht;
1897 $commandeligne->total_tva = $total_tva;
1898 $commandeligne->total_ttc = $total_ttc;
1900 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);
1902 $commandeligne->update_total();
1907 print $langs->trans(
"AlreadyDone");
1924 print
"Error #1 ".$db->error();
1949 $tmpmysoc->setMysoc($conf);
1951 print
'<tr><td colspan="4">';
1954 print
'<b>'.$langs->trans(
'MigrationSupplierOrder').
"</b><br>\n";
1957 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1958 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1959 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cd, ".MAIN_DB_PREFIX.
"commande_fournisseur as c";
1960 $sql .=
" WHERE cd.fk_commande = c.rowid";
1961 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1964 $resql = $db->query($sql);
1966 $num = $db->num_rows($resql);
1970 $obj = $db->fetch_object($resql);
1972 $rowid = $obj->rowid;
1974 $pu = $obj->subprice;
1975 $vatrate = $obj->vatrate;
1976 $remise_percent = $obj->remise_percent;
1977 $remise_percent_global = $obj->remise_percent_global;
1978 $info_bits = $obj->info_bits;
1982 $commandeligne->fetch($rowid);
1984 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $mysoc);
1985 $total_ht = $result[0];
1986 $total_tva = $result[1];
1987 $total_ttc = $result[2];
1989 $commandeligne->total_ht = $total_ht;
1990 $commandeligne->total_tva = $total_tva;
1991 $commandeligne->total_ttc = $total_ttc;
1993 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);
1995 $commandeligne->update_total();
2000 print $langs->trans(
"AlreadyDone");
2017 print
"Error #1 ".$db->error();
2042 if (isModEnabled(
'invoice')) {
2043 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
2045 if (count($modellist) == 0) {
2047 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('crabe','invoice')";
2048 $resql = $db->query($sql);
2055 if (isModEnabled(
'order')) {
2056 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
2058 if (count($modellist) == 0) {
2060 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('einstein','order')";
2061 $resql = $db->query($sql);
2068 if (isModEnabled(
"shipping")) {
2069 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
2071 if (count($modellist) == 0) {
2073 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('rouget','shipping')";
2074 $resql = $db->query($sql);
2097 print
'<tr><td colspan="4">';
2100 print
'<b>'.$langs->trans(
'MigrationShipmentOrderMatching').
"</b><br>\n";
2102 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"fk_commande");
2103 $obj = $db->fetch_object($result);
2109 $sql =
"SELECT e.rowid, e.fk_commande FROM ".MAIN_DB_PREFIX.
"expedition as e";
2110 $resql = $db->query($sql);
2113 $num = $db->num_rows($resql);
2117 $obj = $db->fetch_object($resql);
2119 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_exp (fk_expedition,fk_commande)";
2120 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2121 $resql2 = $db->query($sql);
2134 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition DROP COLUMN fk_commande";
2135 print $langs->trans(
'FieldRenamed').
"<br>\n";
2145 print $langs->trans(
'AlreadyDone').
"<br>\n";
2162 print
'<tr><td colspan="4">';
2165 print
'<b>'.$langs->trans(
'MigrationDeliveryOrderMatching').
"</b><br>\n";
2167 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_commande");
2168 $obj = $db->fetch_object($result);
2174 $sql =
"SELECT l.rowid, l.fk_commande,";
2175 $sql .=
" c.ref_client, c.date_livraison as delivery_date";
2176 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l, ".MAIN_DB_PREFIX.
"commande as c";
2177 $sql .=
" WHERE c.rowid = l.fk_commande";
2178 $resql = $db->query($sql);
2181 $num = $db->num_rows($resql);
2185 $obj = $db->fetch_object($resql);
2187 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_liv (fk_livraison,fk_commande)";
2188 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2189 $resql2 = $db->query($sql);
2192 $delivery_date = $db->jdate($obj->delivery_date);
2194 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2195 $sqlu .=
" ref_client = '".$db->escape($obj->ref_client).
"'";
2196 $sqlu .=
", date_livraison = '".$db->idate($delivery_date).
"'";
2197 $sqlu .=
" WHERE rowid = ".((int) $obj->rowid);
2198 $resql3 = $db->query($sqlu);
2214 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_commande";
2215 print $langs->trans(
'FieldRenamed').
"<br>\n";
2225 print $langs->trans(
'AlreadyDone').
"<br>\n";
2242 print
'<tr><td colspan="4">';
2245 print
'<b>'.$langs->trans(
'MigrationDeliveryDetail').
"</b><br>\n";
2249 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_commande_ligne");
2250 $obj = $db->fetch_object($result);
2256 $sql =
"SELECT cd.rowid, cd.fk_product, cd.description, cd.subprice, cd.total_ht";
2257 $sql .=
", ld.fk_livraison";
2258 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"livraisondet as ld";
2259 $sql .=
" WHERE ld.fk_commande_ligne = cd.rowid";
2260 $resql = $db->query($sql);
2263 $num = $db->num_rows($resql);
2267 $obj = $db->fetch_object($resql);
2269 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"livraisondet SET";
2270 $sql .=
" fk_product = ".((int) $obj->fk_product);
2271 $sql .=
",description = '".$db->escape($obj->description).
"'";
2272 $sql .=
",subprice = ".price2num($obj->subprice);
2273 $sql .=
",total_ht = ".price2num($obj->total_ht);
2274 $sql .=
" WHERE fk_commande_ligne = ".((int) $obj->rowid);
2275 $resql2 = $db->query($sql);
2278 $sql =
"SELECT total_ht";
2279 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
2280 $sql .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2281 $resql3 = $db->query($sql);
2284 $obju = $db->fetch_object($resql3);
2285 $total_ht = $obju->total_ht + $obj->total_ht;
2287 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2288 $sqlu .=
" total_ht = ".price2num($total_ht,
'MT');
2289 $sqlu .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2290 $resql4 = $db->query($sqlu);
2310 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet CHANGE fk_commande_ligne fk_origin_line integer";
2311 print $langs->trans(
'FieldRenamed').
"<br>\n";
2321 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_origin_line");
2322 $obj = $db->fetch_object($result);
2324 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet ADD COLUMN fk_origin_line integer after fk_livraison";
2327 print $langs->trans(
'AlreadyDone').
"<br>\n";
2344 print
'<tr><td colspan="4">';
2347 print
'<b>'.$langs->trans(
'MigrationStockDetail').
"</b><br>\n";
2353 $sql =
"SELECT SUM(reel) as total, fk_product";
2354 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_stock as ps";
2355 $sql .=
" GROUP BY fk_product";
2356 $resql = $db->query($sql);
2359 $num = $db->num_rows($resql);
2363 $obj = $db->fetch_object($resql);
2365 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET";
2366 $sql .=
" stock = ".price2num($obj->total,
'MS');
2367 $sql .=
" WHERE rowid = ".((int) $obj->fk_product);
2369 $resql2 = $db->query($sql);
2406 print
'<tr><td colspan="4">';
2409 print
'<b>'.$langs->trans(
'MigrationMenusDetail').
"</b><br>\n";
2413 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"menu_constraint")) {
2416 $sql =
"SELECT m.rowid, mc.action";
2417 $sql .=
" FROM ".MAIN_DB_PREFIX.
"menu_constraint as mc, ".MAIN_DB_PREFIX.
"menu_const as md, ".MAIN_DB_PREFIX.
"menu as m";
2418 $sql .=
" WHERE md.fk_menu = m.rowid AND md.fk_constraint = mc.rowid";
2419 $sql .=
" AND m.enabled = '1'";
2420 $resql = $db->query($sql);
2423 $num = $db->num_rows($resql);
2426 $obj = $db->fetch_object($resql);
2428 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"menu SET";
2429 $sql .=
" enabled = '".$db->escape($obj->action).
"'";
2430 $sql .=
" WHERE rowid = ".((int) $obj->rowid);
2431 $sql .=
" AND enabled = '1'";
2433 $resql2 = $db->query($sql);
2454 print $langs->trans(
'AlreadyDone').
"<br>\n";
2473 print
'<tr><td colspan="4">';
2476 print
'<b>'.$langs->trans(
'MigrationDeliveryAddress').
"</b><br>\n";
2480 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"co_exp")) {
2483 $sql =
"SELECT c.fk_adresse_livraison, ce.fk_expedition";
2484 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande as c";
2485 $sql .=
", ".MAIN_DB_PREFIX.
"co_exp as ce";
2486 $sql .=
" WHERE c.rowid = ce.fk_commande";
2487 $sql .=
" AND c.fk_adresse_livraison IS NOT NULL AND c.fk_adresse_livraison != 0";
2489 $resql = $db->query($sql);
2492 $num = $db->num_rows($resql);
2496 $obj = $db->fetch_object($resql);
2498 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
2499 $sql .=
" fk_adresse_livraison = '".$db->escape($obj->fk_adresse_livraison).
"'";
2500 $sql .=
" WHERE rowid = ".((int) $obj->fk_expedition);
2502 $resql2 = $db->query($sql);
2511 print $langs->trans(
'AlreadyDone').
"<br>\n";
2524 print $langs->trans(
'AlreadyDone').
"<br>\n";
2543 if (($db->type ==
'mysql' || $db->type ==
'mysqli')) {
2545 dolibarr_install_syslog(
"upgrade2::migrate_restore_missing_links Version of database too old to make this migrate action");
2549 print
'<tr><td colspan="4">';
2552 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (1)<br>\n";
2558 $table1 =
'facturedet';
2559 $field1 =
'fk_remise_except';
2560 $table2 =
'societe_remise_except';
2561 $field2 =
'fk_facture_line';
2565 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2566 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2567 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2568 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2569 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2572 $resql = $db->query($sql);
2575 $num = $db->num_rows($resql);
2579 $obj = $db->fetch_object($resql);
2581 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2582 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table2.
" SET";
2583 $sql .=
" ".$field2.
" = '".$db->escape($obj->rowid).
"'";
2584 $sql .=
" WHERE rowid = ".((int) $obj->field);
2586 $resql2 = $db->query($sql);
2595 print $langs->trans(
'AlreadyDone').
"<br>\n";
2611 print
'<tr><td colspan="4">';
2614 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (2)<br>\n";
2617 $table2 =
'facturedet';
2618 $field2 =
'fk_remise_except';
2619 $table1 =
'societe_remise_except';
2620 $field1 =
'fk_facture_line';
2624 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2625 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2626 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2627 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2628 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2631 $resql = $db->query($sql);
2634 $num = $db->num_rows($resql);
2638 $obj = $db->fetch_object($resql);
2640 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2641 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table2.
" SET";
2642 $sql .=
" ".$field2.
" = '".$db->escape($obj->rowid).
"'";
2643 $sql .=
" WHERE rowid = ".((int) $obj->field);
2645 $resql2 = $db->query($sql);
2654 print $langs->trans(
'AlreadyDone').
"<br>\n";
2669 return ($error ? -1 : 1);
2684 print
'<tr><td colspan="4">';
2687 print
'<b>'.$langs->trans(
'MigrationProjectUserResp').
"</b><br>\n";
2689 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"projet",
"fk_user_resp");
2690 $obj = $db->fetch_object($result);
2696 $sql =
"SELECT rowid, fk_user_resp FROM ".MAIN_DB_PREFIX.
"projet";
2697 $resql = $db->query($sql);
2700 $num = $db->num_rows($resql);
2704 $obj = $db->fetch_object($resql);
2706 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2707 $sql2 .=
"datecreate";
2708 $sql2 .=
", statut";
2709 $sql2 .=
", element_id";
2710 $sql2 .=
", fk_c_type_contact";
2711 $sql2 .=
", fk_socpeople";
2712 $sql2 .=
") VALUES (";
2713 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2715 $sql2 .=
", ".$obj->rowid;
2717 $sql2 .=
", ".$obj->fk_user_resp;
2720 if ($obj->fk_user_resp > 0) {
2721 $resql2 = $db->query($sql2);
2734 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"projet DROP COLUMN fk_user_resp";
2735 if ($db->query($sqlDrop)) {
2748 print $langs->trans(
'AlreadyDone').
"<br>\n";
2765 print
'<tr><td colspan="4">';
2768 print
'<b>'.$langs->trans(
'MigrationProjectTaskActors').
"</b><br>\n";
2770 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"projet_task_actors")) {
2775 $sql =
"SELECT fk_projet_task as fk_project_task, fk_user FROM ".MAIN_DB_PREFIX.
"projet_task_actors";
2776 $resql = $db->query($sql);
2779 $num = $db->num_rows($resql);
2783 $obj = $db->fetch_object($resql);
2785 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2786 $sql2 .=
"datecreate";
2787 $sql2 .=
", statut";
2788 $sql2 .=
", element_id";
2789 $sql2 .=
", fk_c_type_contact";
2790 $sql2 .=
", fk_socpeople";
2791 $sql2 .=
") VALUES (";
2792 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2794 $sql2 .=
", ".$obj->fk_project_task;
2796 $sql2 .=
", ".$obj->fk_user;
2799 $resql2 = $db->query($sql2);
2811 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.
"projet_task_actors";
2812 if ($db->query($sqlDrop)) {
2825 print $langs->trans(
'AlreadyDone').
"<br>\n";
2845 print
'<tr><td colspan="4">';
2848 print
'<b>'.$langs->trans(
'MigrationRelationshipTables', MAIN_DB_PREFIX.$table).
"</b><br>\n";
2852 if ($db->DDLInfoTable(MAIN_DB_PREFIX.$table)) {
2857 $sqlSelect =
"SELECT ".$fk_source.
", ".$fk_target;
2858 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.$table;
2860 $resql = $db->query($sqlSelect);
2863 $num = $db->num_rows($resql);
2867 $obj = $db->fetch_object($resql);
2869 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
2870 $sqlInsert .=
"fk_source";
2871 $sqlInsert .=
", sourcetype";
2872 $sqlInsert .=
", fk_target";
2873 $sqlInsert .=
", targettype";
2874 $sqlInsert .=
") VALUES (";
2875 $sqlInsert .= $obj->$fk_source;
2876 $sqlInsert .=
", '".$db->escape($sourcetype).
"'";
2877 $sqlInsert .=
", ".$obj->$fk_target;
2878 $sqlInsert .=
", '".$db->escape($targettype).
"'";
2881 $result = $db->query($sqlInsert);
2890 print $langs->trans(
'AlreadyDone').
"<br>\n";
2894 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.$table;
2895 if ($db->query($sqlDrop)) {
2908 print $langs->trans(
'AlreadyDone').
"<br>\n";
2926 print
'<tr><td colspan="4">';
2929 print
'<b>'.$langs->trans(
'MigrationProjectTaskTime').
"</b><br>\n";
2935 $sql =
"SELECT rowid, fk_element, element_duration";
2936 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_time";
2937 $resql = $db->query($sql);
2940 $num = $db->num_rows($resql);
2943 $totaltime = array();
2947 $obj = $db->fetch_object($resql);
2949 if ($obj->element_duration > 0) {
2952 list($hour, $min) = explode(
'.', $obj->element_duration);
2953 $hour = $hour * 60 * 60;
2954 $min = ($min / 100) * 60 * 60;
2955 $newtime = $hour + $min;
2957 $sql2 =
"UPDATE ".MAIN_DB_PREFIX.
"element_time SET";
2958 $sql2 .=
" element_duration = ".((int) $newtime);
2959 $sql2 .=
" WHERE rowid = ".((int) $obj->rowid);
2961 $resql2 = $db->query($sql2);
2968 if (!empty($totaltime[$obj->fk_element])) {
2969 $totaltime[$obj->fk_element] += $newtime;
2971 $totaltime[$obj->fk_element] = $newtime;
2974 if (!empty($totaltime[$obj->fk_element])) {
2975 $totaltime[$obj->fk_element] += $obj->element_duration;
2977 $totaltime[$obj->fk_element] = $obj->element_duration;
2986 foreach ($totaltime as $taskid => $total_duration) {
2987 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"projet_task SET";
2988 $sql .=
" duration_effective = ".((int) $total_duration);
2989 $sql .=
" WHERE rowid = ".((int) $taskid);
2991 $resql = $db->query($sql);
2998 print $langs->trans(
'AlreadyDone').
"<br>\n";
3004 print $langs->trans(
'AlreadyDone').
"<br>\n";
3029 print
'<tr><td colspan="4">';
3032 print
'<b>'.$langs->trans(
'MigrationCustomerOrderShipping').
"</b><br>\n";
3036 $result1 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"ref_customer");
3037 $result2 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"date_delivery");
3038 $obj1 = $db->fetch_object($result1);
3039 $obj2 = $db->fetch_object($result2);
3040 if (!$obj1 && !$obj2) {
3045 $sqlAdd1 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN ref_customer varchar(30) AFTER entity";
3046 $sqlAdd2 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition";
3048 if ($db->query($sqlAdd1) && $db->query($sqlAdd2)) {
3049 $sqlSelect =
"SELECT e.rowid as shipping_id, c.ref_client, c.date_livraison as delivery_date";
3050 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"expedition as e";
3051 $sqlSelect .=
", ".MAIN_DB_PREFIX.
"element_element as el";
3052 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"commande as c ON c.rowid = el.fk_source AND el.sourcetype = 'commande'";
3053 $sqlSelect .=
" WHERE e.rowid = el.fk_target";
3054 $sqlSelect .=
" AND el.targettype = 'shipping'";
3056 $resql = $db->query($sqlSelect);
3059 $num = $db->num_rows($resql);
3063 $obj = $db->fetch_object($resql);
3065 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
3066 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_client).
"'";
3067 $sqlUpdate .=
", date_delivery = '".$db->escape($obj->delivery_date ? $obj->delivery_date :
'null').
"'";
3068 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->shipping_id);
3070 $result = $db->query($sqlUpdate);
3079 print $langs->trans(
'AlreadyDone').
"<br>\n";
3097 print $langs->trans(
'AlreadyDone').
"<br>\n";
3113 print
'<tr><td colspan="4">';
3116 print
'<b>'.$langs->trans(
'MigrationShippingDelivery').
"</b><br>\n";
3120 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_expedition");
3121 $obj = $db->fetch_object($result);
3127 $sqlSelect =
"SELECT rowid, fk_expedition";
3128 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
3129 $sqlSelect .=
" WHERE fk_expedition is not null";
3131 $resql = $db->query($sqlSelect);
3134 $num = $db->num_rows($resql);
3138 $obj = $db->fetch_object($resql);
3140 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
3141 $sqlInsert .=
"fk_source";
3142 $sqlInsert .=
", sourcetype";
3143 $sqlInsert .=
", fk_target";
3144 $sqlInsert .=
", targettype";
3145 $sqlInsert .=
") VALUES (";
3146 $sqlInsert .= $obj->fk_expedition;
3147 $sqlInsert .=
", 'shipping'";
3148 $sqlInsert .=
", ".$obj->rowid;
3149 $sqlInsert .=
", 'delivery'";
3152 $result = $db->query($sqlInsert);
3154 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET fk_expedition = NULL";
3155 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3157 $result = $db->query($sqlUpdate);
3170 print $langs->trans(
'AlreadyDone').
"<br>\n";
3174 $sqlDelete =
"DELETE FROM ".MAIN_DB_PREFIX.
"element_element WHERE sourcetype = 'commande' AND targettype = 'delivery'";
3175 $db->query($sqlDelete);
3180 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_expedition";
3181 $db->query($sqlDrop);
3191 print $langs->trans(
'AlreadyDone').
"<br>\n";
3208 print
'<tr><td colspan="4">';
3211 print
'<b>'.$langs->trans(
'MigrationShippingDelivery2').
"</b><br>\n";
3219 $sqlSelect =
"SELECT l.rowid as delivery_id, e.ref_customer, e.date_delivery";
3220 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l,";
3221 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"element_element as el,";
3222 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"expedition as e";
3223 $sqlSelect .=
" WHERE l.rowid = el.fk_target";
3224 $sqlSelect .=
" AND el.targettype = 'delivery'";
3225 $sqlSelect .=
" AND e.rowid = el.fk_source AND el.sourcetype = 'shipping'";
3226 $sqlSelect .=
" AND (e.ref_customer IS NOT NULL OR e.date_delivery IS NOT NULL)";
3228 $sqlSelect .=
" AND (l.ref_customer IS NULL".($db->type !=
'pgsql' ?
" or l.ref_customer = ''" :
"").
")";
3229 $sqlSelect .=
" AND (l.date_delivery IS NULL".($db->type !=
'pgsql' ?
" or l.date_delivery = ''" :
"").
")";
3231 $resql = $db->query($sqlSelect);
3234 $num = $db->num_rows($resql);
3238 $obj = $db->fetch_object($resql);
3240 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
3241 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_customer).
"',";
3242 $sqlUpdate .=
" date_delivery = ".($obj->date_delivery ?
"'".$db->escape($obj->date_delivery).
"'" :
'null');
3243 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->delivery_id);
3245 $result = $db->query($sqlUpdate);
3254 print $langs->trans(
'AlreadyDone').
"<br>\n";
3281 print
'<tr><td colspan="4">';
3284 print
'<b>'.$langs->trans(
'MigrationActioncommElement').
"</b><br>\n";
3287 'propal' =>
'propalrowid',
3288 'order' =>
'fk_commande',
3289 'invoice' =>
'fk_facture',
3290 'contract' =>
'fk_contract',
3291 'order_supplier' =>
'fk_supplier_order',
3292 'invoice_supplier' =>
'fk_supplier_invoice'
3295 foreach ($elements as $type => $field) {
3296 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"actioncomm", $field);
3297 $obj = $db->fetch_object($result);
3303 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"actioncomm SET ";
3304 $sql .=
"fk_element = ".$field.
", elementtype = '".$db->escape($type).
"'";
3305 $sql .=
" WHERE ".$field.
" IS NOT NULL";
3306 $sql .=
" AND fk_element IS NULL";
3307 $sql .=
" AND elementtype IS NULL";
3309 $resql = $db->query($sql);
3323 print $langs->trans(
'AlreadyDone').
"<br>\n";
3340 print
'<tr><td colspan="4">';
3343 print
'<b>'.$langs->trans(
'MigrationPaymentMode').
"</b><br>\n";
3346 'old_id' => array(5, 8, 9, 10, 11),
3347 'new_id' => array(50, 51, 52, 53, 54),
3348 'code' => array(
'VAD',
'TRA',
'LCR',
'FAC',
'PRO'),
3349 'tables' => array(
'commande_fournisseur',
'commande',
'facture_rec',
'facture',
'propal')
3353 foreach ($elements[
'old_id'] as $key => $old_id) {
3358 $sqlSelect =
"SELECT id";
3359 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"c_paiement";
3360 $sqlSelect .=
" WHERE id = ".((int) $old_id);
3361 $sqlSelect .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3363 $resql = $db->query($sqlSelect);
3365 $num = $db->num_rows($resql);
3371 $sqla =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET";
3372 $sqla .=
" fk_paiement = ".((int) $elements[
'new_id'][$key]);
3373 $sqla .=
" WHERE fk_paiement = ".((int) $old_id);
3374 $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]).
"')";
3375 $resqla = $db->query($sqla);
3377 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"c_paiement SET";
3378 $sql .=
" id = ".((int) $elements[
'new_id'][$key]);
3379 $sql .=
" WHERE id = ".((int) $old_id);
3380 $sql .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3381 $resql = $db->query($sql);
3383 if ($resqla && $resql) {
3384 foreach ($elements[
'tables'] as $table) {
3385 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table.
" SET ";
3386 $sql .=
"fk_mode_reglement = ".((int) $elements[
'new_id'][$key]);
3387 $sql .=
" WHERE fk_mode_reglement = ".((int) $old_id);
3389 $resql = $db->query($sql);
3412 print $langs->trans(
'AlreadyDone').
"<br>\n";
3430 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"categorie_association");
3432 $obj = $db->fetch_object($result);
3435 $children = array();
3436 $sql =
"SELECT fk_categorie_mere, fk_categorie_fille";
3437 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3439 $resql = $db->query($sql);
3441 $num = $db->num_rows($resql);
3442 while ($obj = $db->fetch_object($resql)) {
3443 if (!isset($children[$obj->fk_categorie_fille])) {
3444 if ($obj->fk_categorie_mere != $obj->fk_categorie_fille) {
3445 $children[$obj->fk_categorie_fille] = 1;
3446 $couples[$obj->fk_categorie_mere.
'_'.$obj->fk_categorie_fille] = array(
'mere' => $obj->fk_categorie_mere,
'fille' => $obj->fk_categorie_fille);
3454 if (count($couples) > 0 && $num > count($couples)) {
3460 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_association";
3462 $resqld = $db->query($sql);
3465 foreach ($couples as $key => $val) {
3466 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_association(fk_categorie_mere,fk_categorie_fille)";
3467 $sql .=
" VALUES(".((int) $val[
'mere']).
", ".((int) $val[
'fille']).
")";
3469 $resqli = $db->query($sql);
3477 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3478 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Success").
' ('.$num.
'=>'.count($couples).
')</td></tr>';
3481 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3482 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Failed").
'</td></tr>';
3487 print
'<tr><td>'.$langs->trans(
"Error").
'</td>';
3488 print
'<td class="right"><div class="error">'.$db->lasterror().
'</div></td></tr>';
3505 print
'<tr><td colspan="4">';
3508 print
'<b>'.$langs->trans(
'MigrationCategorieAssociation').
"</b><br>\n";
3512 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"categorie_association")) {
3517 $sqlSelect =
"SELECT fk_categorie_mere, fk_categorie_fille";
3518 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3520 $resql = $db->query($sqlSelect);
3523 $num = $db->num_rows($resql);
3527 $obj = $db->fetch_object($resql);
3529 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"categorie SET ";
3530 $sqlUpdate .=
"fk_parent = ".((int) $obj->fk_categorie_mere);
3531 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->fk_categorie_fille);
3533 $result = $db->query($sqlUpdate);
3542 print $langs->trans(
'AlreadyDone').
"<br>\n";
3555 print $langs->trans(
'AlreadyDone').
"<br>\n";
3571 print
'<tr><td colspan="4">';
3574 print
'<b>'.$langs->trans(
'MigrationEvents').
"</b><br>\n";
3582 $sqlSelect =
"SELECT a.id, a.fk_user_action";
3583 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3584 $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";
3585 $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')";
3586 $sqlSelect .=
" ORDER BY a.id";
3589 $resql = $db->query($sqlSelect);
3592 $num = $db->num_rows($resql);
3596 $obj = $db->fetch_object($resql);
3598 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3599 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'user', ".((int) $obj->fk_user_action).
")";
3601 $result = $db->query($sqlUpdate);
3610 print $langs->trans(
'AlreadyDone').
"<br>\n";
3637 print
'<tr><td colspan="4">';
3640 print
'<b>'.$langs->trans(
'MigrationEventsContact').
"</b><br>\n";
3648 $sqlSelect =
"SELECT a.id, a.fk_contact";
3649 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3650 $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";
3651 $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')";
3652 $sqlSelect .=
" ORDER BY a.id";
3655 $resql = $db->query($sqlSelect);
3658 $num = $db->num_rows($resql);
3662 $obj = $db->fetch_object($resql);
3664 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3665 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'socpeople', ".((int) $obj->fk_contact).
")";
3667 $result = $db->query($sqlUpdate);
3676 print $langs->trans(
'AlreadyDone').
"<br>\n";
3706 require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
3708 print
'<tr><td colspan="4">';
3711 print
'<b>'.$langs->trans(
'MigrationResetBlockedLog').
"</b><br>\n";
3719 $sqlSelect =
"SELECT DISTINCT entity";
3720 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"blockedlog";
3724 $resql = $db->query($sqlSelect);
3727 $num = $db->num_rows($resql);
3731 $obj = $db->fetch_object($resql);
3733 print
'Process entity '.$obj->entity;
3735 $sqlSearch =
"SELECT count(rowid) as nb FROM ".MAIN_DB_PREFIX.
"blockedlog WHERE action = 'MODULE_SET' and entity = ".((int) $obj->entity);
3736 $resqlSearch = $db->query($sqlSearch);
3738 $objSearch = $db->fetch_object($resqlSearch);
3740 if ($objSearch && $objSearch->nb == 0) {
3741 print
' - Record for entity must be reset...';
3743 $sqlUpdate =
"DELETE FROM ".MAIN_DB_PREFIX.
"blockedlog";
3744 $sqlUpdate .=
" WHERE entity = ".((int) $obj->entity);
3745 $resqlUpdate = $db->query($sqlUpdate);
3746 if (!$resqlUpdate) {
3755 $object->entity = $obj->entity;
3759 $b->setObjectData(
$object,
'MODULE_SET', 0);
3761 $res = $b->create($user);
3767 print
' - '.$langs->trans(
'AlreadyInV7').
'<br>';
3776 print $langs->trans(
'NothingToDo').
"<br>\n";
3803 print
'<tr><td colspan="4">';
3806 print
'<b>'.$langs->trans(
'MigrationRemiseEntity').
"</b><br>\n";
3814 $sqlSelect =
"SELECT sr.rowid, s.entity";
3815 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise as sr, ".MAIN_DB_PREFIX.
"societe as s";
3816 $sqlSelect .=
" WHERE sr.fk_soc = s.rowid and sr.entity != s.entity";
3820 $resql = $db->query($sqlSelect);
3823 $num = $db->num_rows($resql);
3827 $obj = $db->fetch_object($resql);
3829 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise SET";
3830 $sqlUpdate .=
" entity = ".$obj->entity;
3831 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3833 $result = $db->query($sqlUpdate);
3843 print $langs->trans(
'AlreadyDone').
"<br>\n";
3869 print
'<tr><td colspan="4">';
3872 print
'<b>'.$langs->trans(
'MigrationRemiseExceptEntity').
"</b><br>\n";
3880 $sqlSelect =
"SELECT sr.rowid, sr.fk_soc, sr.fk_facture_source, sr.fk_facture, sr.fk_facture_line";
3881 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as sr";
3884 $resql = $db->query($sqlSelect);
3887 $num = $db->num_rows($resql);
3891 $obj = $db->fetch_object($resql);
3893 if (!empty($obj->fk_facture_source) || !empty($obj->fk_facture)) {
3894 $fk_facture = (!empty($obj->fk_facture_source) ? $obj->fk_facture_source : $obj->fk_facture);
3896 $sqlSelect2 =
"SELECT f.entity";
3897 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f";
3898 $sqlSelect2 .=
" WHERE f.rowid = ".((int) $fk_facture);
3899 } elseif (!empty($obj->fk_facture_line)) {
3900 $sqlSelect2 =
"SELECT f.entity";
3901 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f, ".MAIN_DB_PREFIX.
"facturedet as fd";
3902 $sqlSelect2 .=
" WHERE fd.rowid = ".((int) $obj->fk_facture_line);
3903 $sqlSelect2 .=
" AND fd.fk_facture = f.rowid";
3905 $sqlSelect2 =
"SELECT s.entity";
3906 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
3907 $sqlSelect2 .=
" WHERE s.rowid = ".((int) $obj->fk_soc);
3910 $resql2 = $db->query($sqlSelect2);
3912 if ($db->num_rows($resql2) > 0) {
3913 $obj2 = $db->fetch_object($resql2);
3915 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise_except SET";
3916 $sqlUpdate .=
" entity = ".((int) $obj2->entity);
3917 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3919 $result = $db->query($sqlUpdate);
3934 print $langs->trans(
'AlreadyDone').
"<br>\n";
3961 print
'<tr><td colspan="4">';
3963 print
'<b>'.$langs->trans(
'MigrationUserRightsEntity').
"</b><br>\n";
3971 $sqlSelect =
"SELECT u.rowid, u.entity";
3972 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"user as u";
3973 $sqlSelect .=
" WHERE u.entity > 1";
3976 $resql = $db->query($sqlSelect);
3979 $num = $db->num_rows($resql);
3983 $obj = $db->fetch_object($resql);
3985 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"user_rights SET";
3986 $sqlUpdate .=
" entity = ".((int) $obj->entity);
3987 $sqlUpdate .=
" WHERE fk_user = ".((int) $obj->rowid);
3989 $result = $db->query($sqlUpdate);
3999 print $langs->trans(
'AlreadyDone').
"<br>\n";
4026 print
'<tr><td colspan="4">';
4028 print
'<b>'.$langs->trans(
'MigrationUserGroupRightsEntity').
"</b><br>\n";
4036 $sqlSelect =
"SELECT u.rowid, u.entity";
4037 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"usergroup as u";
4038 $sqlSelect .=
" WHERE u.entity > 1";
4041 $resql = $db->query($sqlSelect);
4044 $num = $db->num_rows($resql);
4048 $obj = $db->fetch_object($resql);
4050 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"usergroup_rights SET";
4051 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4052 $sqlUpdate .=
" WHERE fk_usergroup = ".((int) $obj->rowid);
4054 $result = $db->query($sqlUpdate);
4064 print $langs->trans(
'AlreadyDone').
"<br>\n";
4095 if (is_dir(DOL_DATA_ROOT.$oldname) && !file_exists(DOL_DATA_ROOT.$newname)) {
4096 dolibarr_install_syslog(
"upgrade2::migrate_rename_directories move ".DOL_DATA_ROOT.$oldname.
' into '.DOL_DATA_ROOT.$newname);
4097 @rename(DOL_DATA_ROOT.$oldname, DOL_DATA_ROOT.$newname);
4117 $filetodeletearray = array(
4118 '/core/ajax/ajaxcompanies.php',
4119 '/core/triggers/interface_demo.class.php',
4120 '/core/menus/barre_left/default.php',
4121 '/core/menus/barre_top/default.php',
4122 '/core/modules/modComptabiliteExpert.class.php',
4123 '/core/modules/modCommercial.class.php',
4124 '/core/modules/modProduit.class.php',
4125 '/core/modules/modSkype.class.php',
4126 '/core/triggers/interface_modWebcalendar_Webcalsynchro.class.php',
4127 '/core/triggers/interface_modCommande_Ecotax.class.php',
4128 '/core/triggers/interface_modCommande_fraisport.class.php',
4129 '/core/triggers/interface_modPropale_PropalWorkflow.class.php',
4130 '/core/triggers/interface_99_modWebhook_WebhookTriggers.class.php',
4131 '/core/triggers/interface_99_modZapier_ZapierTriggers.class.php',
4132 '/core/menus/smartphone/iphone.lib.php',
4133 '/core/menus/smartphone/iphone_backoffice.php',
4134 '/core/menus/smartphone/iphone_frontoffice.php',
4135 '/core/menus/standard/auguria_backoffice.php',
4136 '/core/menus/standard/auguria_frontoffice.php',
4137 '/core/menus/standard/eldy_backoffice.php',
4138 '/core/menus/standard/eldy_frontoffice.php',
4139 '/core/modules/export/export_excel.modules.php',
4140 '/core/modules/export/export_csv.modules.php',
4141 '/core/modules/export/exportcsv.modules.php',
4142 '/core/modules/export/export_excel2007new.modules.php',
4143 '/core/modules/facture/pdf_crabe.modules.php',
4144 '/core/modules/facture/pdf_oursin.modules.php',
4145 '/core/modules/mailings/contacts2.modules.php',
4146 '/core/modules/mailings/contacts3.modules.php',
4147 '/core/modules/mailings/contacts4.modules.php',
4148 '/core/modules/mailings/framboise.modules.php',
4149 '/core/modules/mailings/dolibarr_services_expired.modules.php',
4150 '/core/modules/mailings/peche.modules.php',
4151 '/core/modules/mailings/poire.modules.php',
4152 '/core/modules/mailings/kiwi.modules.php',
4153 '/core/boxes/box_members.php',
4155 '/includes/restler/framework/Luracast/Restler/Data/Object.php',
4156 '/includes/nusoap/lib/class.*',
4157 '/phenix/inc/triggers/interface_modPhenix_Phenixsynchro.class.php',
4158 '/webcalendar/inc/triggers/interface_modWebcalendar_webcalsynchro.class.php',
4160 '/api/class/api_generic.class.php',
4161 '/asterisk/cidlookup.php',
4162 '/categories/class/api_category.class.php',
4163 '/categories/class/api_deprecated_category.class.php',
4164 '/compta/facture/class/api_invoice.class.php',
4165 '/commande/class/api_commande.class.php',
4166 '/partnership/class/api_partnership.class.php',
4167 '/product/class/api_product.class.php',
4168 '/recruitment/class/api_recruitment.class.php',
4169 '/societe/class/api_contact.class.php',
4170 '/societe/class/api_thirdparty.class.php',
4171 '/support/online.php',
4172 '/takepos/class/actions_takepos.class.php',
4173 '/user/class/api_user.class.php',
4175 '/install/mysql/tables/llx_c_ticketsup_category.key.sql',
4176 '/install/mysql/tables/llx_c_ticketsup_category.sql',
4177 '/install/mysql/tables/llx_c_ticketsup_severity.key.sql',
4178 '/install/mysql/tables/llx_c_ticketsup_severity.sql',
4179 '/install/mysql/tables/llx_c_ticketsup_type.key.sql',
4180 '/install/mysql/tables/llx_c_ticketsup_type.sql'
4189 foreach ($filetodeletearray as $filetodelete) {
4191 if (preg_match(
'/\*/', $filetodelete) || file_exists(DOL_DOCUMENT_ROOT.$filetodelete)) {
4193 $result =
dol_delete_file(DOL_DOCUMENT_ROOT.$filetodelete, 0, (preg_match(
'/\*/', $filetodelete) ? 1 : 0), 0,
null,
true,
false);
4195 $langs->load(
"errors");
4196 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteFile", DOL_DOCUMENT_ROOT.$filetodelete);
4197 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4222 $filetodeletearray = array(
4223 DOL_DOCUMENT_ROOT.
'/core/modules/facture/terre',
4224 DOL_DOCUMENT_ROOT.
'/core/modules/facture/mercure',
4228 if (!empty($_SERVER[
"WINDIR"])) {
4229 $filetodeletearray[] = DOL_DOCUMENT_ROOT.
'/includes/phpoffice/PhpSpreadsheet';
4232 foreach ($filetodeletearray as $filetodelete) {
4234 if (file_exists($filetodelete)) {
4238 $langs->load(
"errors");
4239 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteDir", $filetodelete);
4240 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4264 if (count($listofmodule) == 0) {
4268 if (!is_object($user)) {
4269 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4270 $user =
new User($db);
4273 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules force=".$force.
", listofmodule=".implode(
',', array_keys($listofmodule)));
4275 $reloadactionformodules = array(
4276 'MAIN_MODULE_AGENDA' => array(
'class' =>
'modAgenda',
'remove' => 1),
4277 'MAIN_MODULE_API' => array(
'class' =>
'modApi'),
4278 'MAIN_MODULE_BARCODE' => array(
'class' =>
'modBarcode',
'remove' => 1),
4279 'MAIN_MODULE_BLOCKEDLOG' => array(
'class' =>
'modBlockedLog',
'deleteinsertmenus' => 1),
4280 'MAIN_MODULE_CRON' => array(
'class' =>
'modCron',
'remove' => 1),
4281 'MAIN_MODULE_EXTERNALSITE' => array(
'class' =>
'modExternalSite',
'remove' => 1),
4282 'MAIN_MODULE_SOCIETE' => array(
'class' =>
'modSociete',
'remove' => 1),
4283 'MAIN_MODULE_PRODUIT' => array(
'class' =>
'modProduct'),
4284 'MAIN_MODULE_SERVICE' => array(
'class' =>
'modService'),
4285 'MAIN_MODULE_COMMANDE' => array(
'class' =>
'modCommande'),
4286 'MAIN_MODULE_DON' => array(
'class' =>
'modDon'),
4287 'MAIN_MODULE_FACTURE' => array(
'class' =>
'modFacture'),
4288 'MAIN_MODULE_FICHEINTER' => array(
'class' =>
'modFicheinter'),
4289 'MAIN_MODULE_FOURNISSEUR' => array(
'class' =>
'modFournisseur'),
4290 'MAIN_MODULE_EXPEDITION' => array(
'class' =>
'modExpedition'),
4291 'MAIN_MODULE_EXPENSEREPORT' => array(
'class' =>
'modExpenseReport'),
4292 'MAIN_MODULE_EVENTORGANIZATION' => array(
'class' =>
'modEventOrganization',
'remove' => 1),
4293 'MAIN_MODULE_ECM' => array(
'class' =>
'modECM',
'remove' => 1),
4294 'MAIN_MODULE_HOLIDAY' => array(
'class' =>
'modHoliday',
'remove' => 1),
4295 'MAIN_MODULE_KNOWLEDGEMANAGEMENT' => array(
'class' =>
'modKnowledgeManagement',
'remove' => 1),
4296 'MAIN_MODULE_LOAN' => array(
'class' =>
'modLoan',
'remove' => 1),
4297 'MAIN_MODULE_PAYBOX' => array(
'class' =>
'modPaybox',
'remove' => 1),
4298 'MAIN_MODULE_PROPAL' => array(
'class' =>
'modPropale'),
4299 'MAIN_MODULE_SUPPLIERPROPOSAL' => array(
'class' =>
'modSupplierProposal',
'remove' => 1),
4300 'MAIN_MODULE_OPENSURVEY' => array(
'class' =>
'modOpenSurvey',
'remove' => 1),
4301 'MAIN_MODULE_PRODUCTBATCH' => array(
'class' =>
'modProductBatch',
'remove' => 1),
4302 'MAIN_MODULE_TAKEPOS' => array(
'class' =>
'modTakePos',
'remove' => 1),
4303 'MAIN_MODULE_VARIANTS' => array(
'class' =>
'modVariants',
'remove' => 1),
4304 'MAIN_MODULE_EMAILCOLLECTOR' => array(
'class' =>
'modEmailCollector',
'remove' => 1),
4307 foreach ($listofmodule as $moduletoreload => $reloadmode) {
4308 if (empty($moduletoreload) || (empty($conf->global->$moduletoreload) && !$force)) {
4314 if (!empty($reloadactionformodules[$moduletoreload])) {
4315 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreload.
" with mode ".$reloadmode);
4317 $val = $reloadactionformodules[$moduletoreload];
4318 $classformodule = $val[
'class'];
4319 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/'.$classformodule.
'.class.php';
4321 $mod =
new $classformodule($db);
4322 if (!empty($val[
'remove'])) {
4323 $mod->remove(
'noboxes');
4325 if (!empty($val[
'deleteinsertmenus'])) {
4327 $mod->delete_menus();
4328 $mod->insert_menus();
4330 $mod->init($reloadmode);
4335 $tmp = preg_match(
'/MAIN_MODULE_([a-zA-Z0-9]+)/', $moduletoreload, $reg);
4336 if (!empty($reg[1])) {
4337 if (strtoupper($moduletoreload) == $moduletoreload) {
4338 $moduletoreloadshort = ucfirst(strtolower($reg[1]));
4340 $moduletoreloadshort = $reg[1];
4343 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreloadshort.
" with mode ".$reloadmode.
" (generic code)");
4345 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php';
4347 $classname =
'mod'.$moduletoreloadshort;
4348 $mod =
new $classname($db);
4351 $mod->delete_menus();
4352 $mod->init($reloadmode);
4354 dolibarr_install_syslog(
'Failed to include '.DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4356 $res = @
dol_include_once(strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4358 $classname =
'mod'.$moduletoreloadshort;
4359 $mod =
new $classname($db);
4360 $mod->init($reloadmode);
4362 dolibarr_install_syslog(
'Failed to include '.strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4363 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4369 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4374 if (!empty($mod) && is_object($mod)) {
4375 print
'<tr class="trforrunsql"><td colspan="4">';
4376 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: ';
4377 print $langs->trans(
'MigrationReloadModule').
' '.$mod->getName();
4378 print
"<!-- (".$reloadmode.
") -->";
4403 $listofmenuhandler = array();
4406 $listofmenuhandler[
'auguria'] = 1;
4409 foreach ($listofmenuhandler as $key => $val) {
4410 print
'<tr class="trforrunsql"><td colspan="4">';
4414 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: '.$langs->trans(
'MenuHandler').
" ".$key.
"<br>\n";
4417 $dir = DOL_DOCUMENT_ROOT.
"/core/menus/";
4418 $file =
'init_menu_'.$key.
'.sql';
4419 if (file_exists($dir.$file)) {
4420 $result =
run_sql($dir.$file, 1,
'', 1, $key);
4436 global $conf, $db, $langs, $user;
4438 print
'<tr><td colspan="4">';
4440 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4442 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4443 $fuser =
new User($db);
4444 if (!is_object($user)) {
4448 $sql =
"SELECT rowid as uid, entity from ".MAIN_DB_PREFIX.
"user";
4449 $resql = $db->query($sql);
4451 while ($obj = $db->fetch_object($resql)) {
4453 $fuser->id = $obj->uid;
4454 $fuser->entity = $obj->entity;
4457 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4459 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4461 $dir = $conf->user->multidir_output[$entity];
4466 $origin = $dir.
'/'.
get_exdir($fuser->id, 2, 0, 1, $fuser,
'user');
4467 $destin = $dir.
'/'.$fuser->id;
4475 $handle = opendir($origin_osencoded);
4476 if (is_resource($handle)) {
4477 while (($file = readdir($handle)) !==
false) {
4478 if ($file ==
'.' || $file ==
'..') {
4483 $thumbs = opendir($origin_osencoded.
'/'.$file);
4484 if (is_resource($thumbs)) {
4486 while (($thumb = readdir($thumbs)) !==
false) {
4488 if ($thumb ==
'.' || $thumb ==
'..') {
4494 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb, 0, 0);
4504 dol_copy($origin.
'/'.$file, $destin.
'/'.$file, 0, 0);
4525 global $db, $langs, $user;
4527 print
'<tr><td colspan="4">';
4529 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4531 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4532 $fuser =
new User($db);
4533 if (!is_object($user)) {
4537 $sql =
"SELECT rowid as uid, entity, photo from ".MAIN_DB_PREFIX.
"user";
4538 $resql = $db->query($sql);
4540 while ($obj = $db->fetch_object($resql)) {
4542 $fuser->id = $obj->uid;
4543 $fuser->entity = $obj->entity;
4544 $fuser->photo = $obj->photo;
4547 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4549 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4551 $dir = DOL_DATA_ROOT.
'/users';
4556 $origin = $dir.
'/'.$fuser->id;
4557 $destin = $dir.
'/'.$fuser->id.
'/photos';
4565 $handle = opendir($origin_osencoded);
4566 if (is_resource($handle)) {
4567 while (($file = readdir($handle)) !==
false) {
4568 if ($file ==
'.' || $file ==
'..' || $file ==
'photos') {
4571 if (!empty($fuser->photo) && ($file != $fuser->photo && $file !=
'thumbs')) {
4576 $thumbs = opendir($origin_osencoded.
'/'.$file);
4577 if (is_resource($thumbs)) {
4579 while (($thumb = readdir($thumbs)) !==
false) {
4581 if ($thumb ==
'.' || $thumb ==
'..') {
4587 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb, 0, 0);
4596 dol_copy($origin.
'/'.$file, $destin.
'/'.$file, 0, 0);
4633 print
'<tr><td colspan="4">';
4634 $sql =
'SELECT rowid, socialnetworks';
4635 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'user WHERE';
4636 $sql .=
" skype IS NOT NULL OR skype <> ''";
4637 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4638 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4639 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4640 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4641 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4642 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4643 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4644 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4646 $resql = $db->query($sql);
4648 while ($obj = $db->fetch_object($resql)) {
4649 $arraysocialnetworks = array();
4650 if (!empty($obj->skype)) {
4651 $arraysocialnetworks[
'skype'] = $obj->skype;
4653 if (!empty($obj->twitter)) {
4654 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4656 if (!empty($obj->facebook)) {
4657 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4659 if (!empty($obj->linkedin)) {
4660 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4662 if (!empty($obj->instagram)) {
4663 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4665 if (!empty($obj->snapchat)) {
4666 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4668 if (!empty($obj->googleplus)) {
4669 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4671 if (!empty($obj->youtube)) {
4672 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4674 if (!empty($obj->whatsapp)) {
4675 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4677 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4678 $obj->socialnetworks =
'[]';
4680 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4681 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"user SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
4682 $sqlupd .=
', skype=null';
4683 $sqlupd .=
', twitter=null';
4684 $sqlupd .=
', facebook=null';
4685 $sqlupd .=
', linkedin=null';
4686 $sqlupd .=
', instagram=null';
4687 $sqlupd .=
', snapchat=null';
4688 $sqlupd .=
', googleplus=null';
4689 $sqlupd .=
', youtube=null';
4690 $sqlupd .=
', whatsapp=null';
4691 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4693 $resqlupd = $db->query($sqlupd);
4708 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Users').
"</b><br>\n";
4722 print
'<tr><td colspan="4">';
4725 print
'<tr><td colspan="4">';
4726 $sql =
'SELECT rowid, socialnetworks';
4727 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'adherent WHERE ';
4728 $sql .=
" skype IS NOT NULL OR skype <> ''";
4729 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4730 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4731 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4732 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4733 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4734 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4735 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4736 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4738 $resql = $db->query($sql);
4740 while ($obj = $db->fetch_object($resql)) {
4741 $arraysocialnetworks = array();
4742 if (!empty($obj->skype)) {
4743 $arraysocialnetworks[
'skype'] = $obj->skype;
4745 if (!empty($obj->twitter)) {
4746 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4748 if (!empty($obj->facebook)) {
4749 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4751 if (!empty($obj->linkedin)) {
4752 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4754 if (!empty($obj->instagram)) {
4755 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4757 if (!empty($obj->snapchat)) {
4758 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4760 if (!empty($obj->googleplus)) {
4761 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4763 if (!empty($obj->youtube)) {
4764 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4766 if (!empty($obj->whatsapp)) {
4767 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4769 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4770 $obj->socialnetworks =
'[]';
4772 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4773 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"adherent SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
4774 $sqlupd .=
', skype=null';
4775 $sqlupd .=
', twitter=null';
4776 $sqlupd .=
', facebook=null';
4777 $sqlupd .=
', linkedin=null';
4778 $sqlupd .=
', instagram=null';
4779 $sqlupd .=
', snapchat=null';
4780 $sqlupd .=
', googleplus=null';
4781 $sqlupd .=
', youtube=null';
4782 $sqlupd .=
', whatsapp=null';
4783 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4785 $resqlupd = $db->query($sqlupd);
4800 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Members').
"</b><br>\n";
4816 print
'<tr><td colspan="4">';
4817 $sql =
'SELECT rowid, socialnetworks';
4818 $sql .=
', jabberid, skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'socpeople WHERE';
4819 $sql .=
" jabberid IS NOT NULL OR jabberid <> ''";
4820 $sql .=
" OR skype IS NOT NULL OR skype <> ''";
4821 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4822 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4823 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4824 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4825 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4826 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4827 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4828 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4830 $resql = $db->query($sql);
4832 while ($obj = $db->fetch_object($resql)) {
4833 $arraysocialnetworks = array();
4834 if (!empty($obj->jabberid)) {
4835 $arraysocialnetworks[
'jabber'] = $obj->jabberid;
4837 if (!empty($obj->skype)) {
4838 $arraysocialnetworks[
'skype'] = $obj->skype;
4840 if (!empty($obj->twitter)) {
4841 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4843 if (!empty($obj->facebook)) {
4844 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4846 if (!empty($obj->linkedin)) {
4847 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4849 if (!empty($obj->instagram)) {
4850 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4852 if (!empty($obj->snapchat)) {
4853 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4855 if (!empty($obj->googleplus)) {
4856 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4858 if (!empty($obj->youtube)) {
4859 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4861 if (!empty($obj->whatsapp)) {
4862 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4864 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4865 $obj->socialnetworks =
'[]';
4867 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4868 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"socpeople SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
4869 $sqlupd .=
', jabberid=null';
4870 $sqlupd .=
', skype=null';
4871 $sqlupd .=
', twitter=null';
4872 $sqlupd .=
', facebook=null';
4873 $sqlupd .=
', linkedin=null';
4874 $sqlupd .=
', instagram=null';
4875 $sqlupd .=
', snapchat=null';
4876 $sqlupd .=
', googleplus=null';
4877 $sqlupd .=
', youtube=null';
4878 $sqlupd .=
', whatsapp=null';
4879 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4881 $resqlupd = $db->query($sqlupd);
4896 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Contacts').
"</b><br>\n";
4912 print
'<tr><td colspan="4">';
4913 $sql =
'SELECT rowid, socialnetworks';
4914 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'societe WHERE ';
4915 $sql .=
" skype IS NOT NULL OR skype <> ''";
4916 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4917 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4918 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4919 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4920 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4921 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4922 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4923 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4925 $resql = $db->query($sql);
4927 while ($obj = $db->fetch_object($resql)) {
4928 $arraysocialnetworks = array();
4929 if (!empty($obj->skype)) {
4930 $arraysocialnetworks[
'skype'] = $obj->skype;
4932 if (!empty($obj->twitter)) {
4933 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4935 if (!empty($obj->facebook)) {
4936 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4938 if (!empty($obj->linkedin)) {
4939 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4941 if (!empty($obj->instagram)) {
4942 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4944 if (!empty($obj->snapchat)) {
4945 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4947 if (!empty($obj->googleplus)) {
4948 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4950 if (!empty($obj->youtube)) {
4951 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4953 if (!empty($obj->whatsapp)) {
4954 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4956 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4957 $obj->socialnetworks =
'[]';
4959 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4960 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"societe SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
4961 $sqlupd .=
', skype=null';
4962 $sqlupd .=
', twitter=null';
4963 $sqlupd .=
', facebook=null';
4964 $sqlupd .=
', linkedin=null';
4965 $sqlupd .=
', instagram=null';
4966 $sqlupd .=
', snapchat=null';
4967 $sqlupd .=
', googleplus=null';
4968 $sqlupd .=
', youtube=null';
4969 $sqlupd .=
', whatsapp=null';
4970 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4972 $resqlupd = $db->query($sqlupd);
4987 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Thirdparties').
"</b><br>\n";
5007 print
'<tr class="trforrunsql"><td colspan="4">';
5008 $sql =
'SELECT rowid, field';
5009 if ($mode ==
'export') {
5012 $sql .=
' FROM '.MAIN_DB_PREFIX.$mode.
'_model WHERE';
5013 $sql .=
" type LIKE 'propale_%' OR type LIKE 'commande_%' OR type LIKE 'facture_%'";
5015 $resql = $db->query($sql);
5017 while ($obj = $db->fetch_object($resql)) {
5018 $oldfield = $obj->field;
5019 $newfield = str_replace(array(
',f.facnumber',
'f.facnumber,',
'f.total,',
'f.tva,'), array(
',f.ref',
'f.ref,',
'f.total_ht,',
'f.total_tva,'), $oldfield);
5021 if ($mode ==
'export') {
5022 $oldfilter = $obj->filter;
5023 $newfilter = str_replace(array(
'f.facnumber=',
'f.total=',
'f.tva='), array(
'f.ref=',
'f.total_ht=',
'f.total_tva='), $oldfilter);
5029 if ($oldfield != $newfield || $oldfilter != $newfilter) {
5030 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.$mode.
"_model SET field = '".$db->escape($newfield).
"'";
5031 if ($mode ==
'export') {
5032 $sqlupd .=
", filter = '".$db->escape($newfilter).
"'";
5034 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5035 $resultstring .=
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$sqlupd.
"</td></tr>\n";
5036 $resqlupd = $db->query($sqlupd);
5052 print
'<b>'.$langs->trans(
'MigrationImportOrExportProfiles', $mode).
"</b><br>\n";
5055 if ($resultstring) {
5056 print $resultstring;
5058 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5075 print
'<tr class="trforrunsql"><td colspan="4">';
5076 print
'<b>'.$langs->trans(
'MigrationContractLineRank').
"</b><br>\n";
5078 $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";
5079 $sql .=
" ORDER BY c.rowid,cd.rowid";
5081 $resql = $db->query($sql);
5084 $current_contract = 0;
5085 while ($obj = $db->fetch_object($resql)) {
5086 if (empty($current_contract) || $current_contract == $obj->cid) {
5092 $sqlUpd =
"UPDATE ".$db->prefix().
"contratdet SET rang=".(int) $currentRank.
" WHERE rowid=".(
int) $obj->cdid;
5093 $resultstring =
'.';
5094 print $resultstring;
5095 $resqlUpd = $db->query($sqlUpd);
5101 $current_contract = $obj->cid;
5114 if (!$resultstring) {
5115 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5130 $firstInstallVersion =
getDolGlobalString(
'MAIN_VERSION_FIRST_INSTALL', DOL_VERSION);
5131 $migrationNeeded = (
versioncompare(explode(
'.', $firstInstallVersion, 3), array(20, 0, -5)) < 0 && !$lock);
5133 print
'<tr class="trforrunsql"><td colspan="4">';
5134 print
'<b>'.$langs->trans(
'InvoiceExportModelsMigration').
"</b>: \n";
5136 if (! $migrationNeeded) {
5137 print $langs->trans(
"AlreadyDone");
5139 dolibarr_set_const($db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5146 $sql1 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_0' WHERE type = 'facture_1'";
5148 $resql1 = $db->query($sql1);
5157 $modified1 = $db->affected_rows($resql1);
5159 print str_repeat(
'.', $modified1);
5163 $sql2 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_1' WHERE type = 'facture_2'";
5165 $resql2 = $db->query($sql2);
5174 $modified2 = $db->affected_rows($resql2);
5176 print str_repeat(
'.', $modified2);
5180 if (empty($modified1 + $modified2)) {
5181 print $langs->trans(
'NothingToDo');
5186 dolibarr_set_const($db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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.
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
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_copy($srcfile, $destfile, $newmask='0', $overwriteifexists=1, $testvirus=0, $indexdatabase=0)
Copy a file to another file.
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.
dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayreplacement=null, $excludesubdir=0, $excludefileext=null, $excludearchivefiles=0)
Copy a dir to another dir.
dol_is_file($pathoffile)
Return if path is a file.
dol_is_dir($folder)
Test if filename is a directory.
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
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.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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/Re-enable 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)
Correspondence 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_invoice_export_models()
Invoice exports been shifted (facture_1 => facture_0, facture_2 => facture_1) in version 20,...
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 assignment to owner.
migrate_clean_association($db, $langs, $conf)
Delete duplicates in table categorie_association.
migrate_commande_livraison($db, $langs, $conf)
Correspondence des livraisons et des commandes clients dans la table llx_co_liv.
migrate_event_assignement_contact($db, $langs, $conf)
Migrate event assignment 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.