44define(
'ALLOWED_IF_UPGRADE_UNLOCK_FOUND', 1);
45include_once
'inc.php';
51if (!file_exists($conffile)) {
52 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").';
54require_once $conffile;
55require_once $dolibarr_main_document_root.
'/compta/facture/class/facture.class.php';
56require_once $dolibarr_main_document_root.
'/comm/propal/class/propal.class.php';
57require_once $dolibarr_main_document_root.
'/contrat/class/contrat.class.php';
58require_once $dolibarr_main_document_root.
'/commande/class/commande.class.php';
59require_once $dolibarr_main_document_root.
'/fourn/class/fournisseur.commande.class.php';
60require_once $dolibarr_main_document_root.
'/core/lib/price.lib.php';
61require_once $dolibarr_main_document_root.
'/core/class/menubase.class.php';
62require_once $dolibarr_main_document_root.
'/core/lib/admin.lib.php';
63require_once $dolibarr_main_document_root.
'/core/lib/files.lib.php';
78$err = error_reporting();
81 @set_time_limit((
int)
$conf->global->MAIN_OVERRIDE_TIME_LIMIT);
87$setuplang =
GETPOST(
"selectlang",
'aZ09', 3) ?
GETPOST(
"selectlang",
'aZ09', 3) :
'auto';
88$langs->setDefaultLang($setuplang);
89$versionfrom =
GETPOST(
"versionfrom",
'alpha', 3) ?
GETPOST(
"versionfrom",
'alpha', 3) : (empty($argv[1]) ?
'' : $argv[1]);
90$versionto =
GETPOST(
"versionto",
'alpha', 3) ?
GETPOST(
"versionto",
'alpha', 3) : (empty($argv[2]) ?
'' : $argv[2]);
91$enablemodules =
GETPOST(
"enablemodules",
'alpha', 3) ?
GETPOST(
"enablemodules",
'alpha', 3) : (empty($argv[3]) ?
'' : $argv[3]);
93$langs->loadLangs(array(
"admin",
"install",
"bills",
"suppliers"));
95if ($dolibarr_main_db_type ==
'mysqli') {
98if ($dolibarr_main_db_type ==
'pgsql') {
101if ($dolibarr_main_db_type ==
'mssql') {
106dolibarr_install_syslog(
"--- upgrade2: entering upgrade2.php page ".$versionfrom.
" ".$versionto.
" ".$enablemodules);
107if (!is_object(
$conf)) {
117if ((!$versionfrom || preg_match(
'/version/', $versionfrom)) && (!$versionto || preg_match(
'/version/', $versionto))) {
118 print
'Error: Parameter versionfrom or versionto missing or having a bad format.'.
"\n";
119 print
'Upgrade must be ran from command line with parameters or called from page install/index.php (like a first install)'.
"\n";
121 $sapi_type = php_sapi_name();
122 $script_file = basename(__FILE__);
124 if (substr($sapi_type, 0, 3) ==
'cli') {
125 print
'Syntax from command line: '.$script_file.
" x.y.z a.b.c [MAIN_MODULE_NAME1_TO_ENABLE,MAIN_MODULE_NAME2_TO_ENABLE...]\n";
126 print
'Example, upgrade from 19 to 20: '.$script_file.
" 19.0.0 20.0.0\n";
127 print
'Example, enable a module only: '.$script_file.
" 0.0.0 0.0.0 MAIN_MODULE_Adherent\n";
133pHeader(
'',
'step5',
GETPOST(
'action',
'aZ09') ?
GETPOST(
'action',
'aZ09') :
'upgrade',
'versionfrom='.$versionfrom.
'&versionto='.$versionto,
'',
'main-inside main-inside-borderbottom');
136if (!
GETPOST(
'action',
'aZ09') || preg_match(
'/upgrade/i',
GETPOST(
'action',
'aZ09'))) {
137 print
'<h3><img class="valignmiddle inline-block paddingright" src="../theme/common/octicons/build/svg/database.svg" width="20" alt="Database"> ';
138 print
'<span class="inline-block">'.$langs->trans(
'DataMigration').
'</span></h3>';
140 print
'<table border="0" width="100%">';
143 if ((!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) || !empty($dolibarr_main_db_encrypted_pass)) {
144 require_once $dolibarr_main_document_root.
'/core/lib/security.lib.php';
145 if (!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) {
146 $dolibarr_main_db_pass = preg_replace(
'/crypted:/i',
'', $dolibarr_main_db_pass);
147 $dolibarr_main_db_pass =
dol_decode($dolibarr_main_db_pass);
148 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
150 $dolibarr_main_db_pass =
dol_decode($dolibarr_main_db_encrypted_pass);
155 $conf->db->type = $dolibarr_main_db_type;
156 $conf->db->host = $dolibarr_main_db_host;
157 $conf->db->port = $dolibarr_main_db_port;
158 $conf->db->name = $dolibarr_main_db_name;
159 $conf->db->user = $dolibarr_main_db_user;
160 $conf->db->pass = $dolibarr_main_db_pass;
164 if (!$db->connected) {
165 print
'<tr><td colspan="4">'.$langs->trans(
"ErrorFailedToConnectToDatabase",
$conf->db->name).
'</td><td class="right">'.$langs->trans(
'Error').
'</td></tr>';
171 if ($db->database_selected) {
178 if (empty($dolibarr_main_db_encryption)) {
179 $dolibarr_main_db_encryption = 0;
181 $conf->db->dolibarr_main_db_encryption = $dolibarr_main_db_encryption;
182 if (empty($dolibarr_main_db_cryptkey)) {
183 $dolibarr_main_db_cryptkey =
'';
185 $conf->db->dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey;
188 $conf->setValues($db);
191 $listofentities = array(1);
194 include_once DOL_DOCUMENT_ROOT.
'/core/class/hookmanager.class.php';
196 $hookmanager->initHooks(array(
'upgrade2'));
198 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto);
201 $reshook = $hookmanager->executeHooks(
'doUpgradeBefore', $parameters,
$object, $action);
202 if ($reshook >= 0 && is_array($hookmanager->resArray)) {
204 $listofentities = array_unique(array_merge($listofentities, $hookmanager->resArray));
215 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN birth date';
217 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemployment date';
219 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemploymentend date';
221 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_range integer';
223 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_c_exp_tax_cat integer';
225 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN langs varchar(24)';
227 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fieldcomputed text';
229 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fielddefault varchar(255)';
231 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
"extrafields ADD COLUMN enabled varchar(255) DEFAULT '1'";
233 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN help text';
235 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user_rights ADD COLUMN entity integer DEFAULT 1 NOT NULL';
241 foreach ($listofentities as $entity) {
242 dol_syslog(
"Process upgrade2 for entity ".$entity);
245 $conf->setEntityValues($db, $entity);
248 if (defined(
'SYSLOG_FILE')) {
249 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
252 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
254 $versiontoarray = array();
255 $versionranarray = array();
257 dol_syslog(
"Process upgrade2 d for entity ".$entity);
260 if (count($listofentities) > 1) {
261 print
'<tr><td colspan="4">*** '.$langs->trans(
"Entity").
' '.$entity.
'</td></tr>'.
"\n";
266 $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 :
''));
272 $versiontoarray = explode(
'.', $versionto);
273 $versionranarray = explode(
'.', DOL_VERSION);
275 $afterversionarray = explode(
'.',
'2.0.0');
276 $beforeversionarray = explode(
'.',
'2.7.9');
278 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
339 $afterversionarray = explode(
'.',
'2.7.9');
340 $beforeversionarray = explode(
'.',
'2.8.9');
343 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
367 $afterversionarray = explode(
'.',
'2.8.9');
368 $beforeversionarray = explode(
'.',
'2.9.9');
370 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
382 $afterversionarray = explode(
'.',
'2.9.9');
383 $beforeversionarray = explode(
'.',
'3.0.9');
389 $afterversionarray = explode(
'.',
'3.0.9');
390 $beforeversionarray = explode(
'.',
'3.1.9');
392 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
400 $afterversionarray = explode(
'.',
'3.1.9');
401 $beforeversionarray = explode(
'.',
'3.2.9');
403 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
413 $afterversionarray = explode(
'.',
'3.2.9');
414 $beforeversionarray = explode(
'.',
'3.3.9');
416 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
425 $afterversionarray = explode(
'.',
'3.6.9');
426 $beforeversionarray = explode(
'.',
'3.7.9');
428 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
434 $afterversionarray = explode(
'.',
'3.7.9');
435 $beforeversionarray = explode(
'.',
'3.8.9');
441 $afterversionarray = explode(
'.',
'3.9.9');
442 $beforeversionarray = explode(
'.',
'4.0.9');
444 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
450 $afterversionarray = explode(
'.',
'4.0.9');
451 $beforeversionarray = explode(
'.',
'5.0.9');
453 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
463 $afterversionarray = explode(
'.',
'5.0.9');
464 $beforeversionarray = explode(
'.',
'6.0.9');
466 if (isModEnabled(
'multicompany')) {
467 global $multicompany_transverse_mode;
470 if (empty($multicompany_transverse_mode)) {
471 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
483 $afterversionarray = explode(
'.',
'6.0.9');
484 $beforeversionarray = explode(
'.',
'7.0.9');
486 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
495 $afterversionarray = explode(
'.',
'7.0.9');
496 $beforeversionarray = explode(
'.',
'8.0.9');
498 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
504 $afterversionarray = explode(
'.',
'8.0.9');
505 $beforeversionarray = explode(
'.',
'9.0.9');
511 $afterversionarray = explode(
'.',
'10.0.9');
512 $beforeversionarray = explode(
'.',
'11.0.9');
514 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
523 $afterversionarray = explode(
'.',
'13.0.9');
524 $beforeversionarray = explode(
'.',
'14.0.9');
526 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
533 $afterversionarray = explode(
'.',
'15.0.9');
534 $beforeversionarray = explode(
'.',
'16.0.9');
536 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
543 $afterversionarray = explode(
'.',
'16.0.9');
544 $beforeversionarray = explode(
'.',
'17.0.9');
546 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
552 $afterversionarray = explode(
'.',
'17.0.9');
553 $beforeversionarray = explode(
'.',
'18.0.9');
555 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
569 $afterversionarray = explode(
'.',
'19.0.9');
570 $beforeversionarray = explode(
'.',
'20.0.9');
572 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
578 $afterversionarray = explode(
'.',
'20.0.9');
579 $beforeversionarray = explode(
'.',
'21.0.9');
583 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
591 dol_syslog(
"Run migrate_... if migration is LAST ONE");
594 $listofmodule = array(
595 'MAIN_MODULE_ACCOUNTING' =>
'newboxdefonly',
596 'MAIN_MODULE_AGENDA' =>
'newboxdefonly',
597 'MAIN_MODULE_BOM' =>
'menuonly',
598 'MAIN_MODULE_BANQUE' =>
'menuonly',
599 'MAIN_MODULE_BARCODE' =>
'newboxdefonly',
600 'MAIN_MODULE_CRON' =>
'newboxdefonly',
601 'MAIN_MODULE_COMMANDE' =>
'newboxdefonly',
602 'MAIN_MODULE_BLOCKEDLOG' =>
'noboxes',
603 'MAIN_MODULE_DEPLACEMENT' =>
'newboxdefonly',
604 'MAIN_MODULE_DON' =>
'newboxdefonly',
605 'MAIN_MODULE_ECM' =>
'newboxdefonly',
606 'MAIN_MODULE_EXTERNALSITE' =>
'newboxdefonly',
607 'MAIN_MODULE_EXPENSEREPORT' =>
'newboxdefonly',
608 'MAIN_MODULE_FACTURE' =>
'newboxdefonly',
609 'MAIN_MODULE_FOURNISSEUR' =>
'newboxdefonly',
610 'MAIN_MODULE_FICHEINTER' =>
'newboxdefonly',
611 'MAIN_MODULE_HOLIDAY' =>
'newboxdefonly',
612 'MAIN_MODULE_LOAN' =>
'newboxdefonly',
613 'MAIN_MODULE_MARGIN' =>
'menuonly',
614 'MAIN_MODULE_MRP' =>
'menuonly',
615 'MAIN_MODULE_OPENSURVEY' =>
'newboxdefonly',
616 'MAIN_MODULE_PAYBOX' =>
'newboxdefonly',
617 'MAIN_MODULE_PRINTING' =>
'newboxdefonly',
618 'MAIN_MODULE_PRODUIT' =>
'newboxdefonly',
619 'MAIN_MODULE_RECRUITMENT' =>
'menuonly',
620 'MAIN_MODULE_RESOURCE' =>
'noboxes',
621 'MAIN_MODULE_SALARIES' =>
'newboxdefonly',
622 'MAIN_MODULE_SERVICE' =>
'newboxdefonly',
623 'MAIN_MODULE_SYSLOG' =>
'newboxdefonly',
624 'MAIN_MODULE_SOCIETE' =>
'newboxdefonly',
625 'MAIN_MODULE_STRIPE' =>
'menuonly',
626 'MAIN_MODULE_TICKET' =>
'newboxdefonly',
627 'MAIN_MODULE_TAKEPOS' =>
'newboxdefonly',
628 'MAIN_MODULE_USER' =>
'newboxdefonly',
629 'MAIN_MODULE_VARIANTS' =>
'newboxdefonly',
630 'MAIN_MODULE_WEBSITE' =>
'newboxdefonly',
647 if (!$error && $enablemodules) {
649 $listofmodules = array();
650 $enablemodules = preg_replace(
'/enablemodules=/',
'', $enablemodules);
651 $tmplistofmodules = explode(
',', $enablemodules);
652 foreach ($tmplistofmodules as $value) {
653 $listofmodules[$value] =
'forceactivate';
657 if ($resultreloadmodules < 0) {
665 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' =>
$conf);
668 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterDB', $parameters,
$object, $action);
669 if ($hookmanager->resNbOfHooks > 0) {
671 print
'<tr><td colspan="4">';
672 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
673 print $hookmanager->error;
674 print
"<!-- (".$reshook.
") -->";
677 print
'<tr class="trforrunsql"><td colspan="4">';
678 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (DB)</b>: <span class="ok">OK</span>';
679 print
"<!-- (".$reshook.
") -->";
684 if (!empty(
$conf->modules_parts[
'hooks'])) {
685 print
'<tr class="trforrunsql"><td colspan="4">';
686 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterDB");
697 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"const SET VALUE = 'torefresh' WHERE name = 'MAIN_FIRST_PING_OK_ID'";
712 foreach ($listofentities as $entity) {
714 $conf->setEntityValues($db, $entity);
716 if (defined(
'SYSLOG_FILE')) {
717 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
719 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
723 $srcroot = DOL_DOCUMENT_ROOT.
'/install/medias';
724 $destroot = DOL_DATA_ROOT.
'/medias';
737 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' =>
$conf);
740 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterFiles', $parameters,
$object, $action);
741 if ($hookmanager->resNbOfHooks > 0) {
743 print
'<tr><td colspan="4">';
744 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
745 print $hookmanager->error;
746 print
"<!-- (".$reshook.
") -->";
749 print
'<tr class="trforrunsql"><td colspan="4">';
750 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (Files)</b>: <span class="ok">OK</span>';
751 print
"<!-- (".$reshook.
") -->";
756 if (!empty(
$conf->modules_parts[
'hooks'])) {
757 print
'<tr class="trforrunsql"><td colspan="4">';
758 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterFiles");
768 print
'<table width="100%">';
769 print
'<tr><td style="width: 30%">'.$langs->trans(
"MigrationFinished").
'</td>';
770 print
'<td class="right">';
774 print
'<span class="error">'.$langs->trans(
"Error").
'</span> - ';
778 print
'<script type="text/javascript">
779 jQuery(document).ready(function() {
780 function init_trrunsql()
782 console.log("toggle .trforrunsql");
783 jQuery(".trforrunsql").toggle();
786 jQuery(".trforrunsqlshowhide").click(function() {
791 print
'<a class="trforrunsqlshowhide" href="#">'.$langs->trans(
"ShowHideDetails").
'</a>';
794 print
'</td></tr>'.
"\n";
800 print
'<div class="error">'.$langs->trans(
'ErrorWrongParameters').
'</div>';
805if ($error && isset($argv[1])) {
811pFooter($error ? 2 : 0, $setuplang);
834 print
'<tr><td colspan="4">';
837 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
839 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
840 $obj = $db->fetch_object($result);
842 $sql =
"SELECT p.rowid, p.fk_facture, p.amount";
843 $sql .=
" FROM ".MAIN_DB_PREFIX.
"paiement as p";
844 $sql .=
" WHERE p.fk_facture > 0";
846 $resql = $db->query($sql);
853 $num = $db->num_rows($resql);
856 $obj = $db->fetch_object($resql);
857 $row[$i][0] = $obj->rowid;
858 $row[$i][1] = $obj->fk_facture;
859 $row[$i][2] = $obj->amount;
867 print $langs->trans(
'MigrationPaymentsNumberToUpdate', $num).
"<br>\n";
871 for ($i = 0; $i < $num; $i++) {
872 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
873 $sql .=
" VALUES (".((int) $row[$i][1]).
",".((int) $row[$i][0]).
",".((float) $row[$i][2]).
")";
875 $res += $db->query($sql);
877 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET fk_facture = 0 WHERE rowid = ".((int) $row[$i][0]);
879 $res += $db->query($sql);
881 print $langs->trans(
'MigrationProcessPaymentUpdate', $row[$i][0]).
"<br>\n";
885 if (is_array($row) && $res == (2 * count($row))) {
887 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
890 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
893 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
896 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
914 print
'<tr><td colspan="4">';
917 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
919 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
920 $obj = $db->fetch_object($result);
923 $sql =
"SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
924 $sql .=
" bu2.url_id as socid";
925 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
926 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
927 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')";
928 $sql .=
" WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid";
929 $sql .=
" AND b.rappro = 1";
930 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
932 $resql = $db->query($sql);
938 $num = $db->num_rows($resql);
941 $obj = $db->fetch_object($resql);
942 if ($obj->pamount == $obj->bamount && $obj->socid) {
943 $row[$j][
'paymentid'] = $obj->rowid;
944 $row[$j][
'pamount'] = $obj->pamount;
945 $row[$j][
'fk_bank'] = $obj->fk_bank;
946 $row[$j][
'bamount'] = $obj->bamount;
947 $row[$j][
'socid'] = $obj->socid;
948 $row[$j][
'datec'] = $obj->datec;
958 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 1).
': '.count($row).
"<br>\n";
963 for ($i = 0; $i < $num; $i++) {
965 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>';
969 $sql =
" SELECT distinct f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
970 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
971 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
972 $sql .=
" AND pf.fk_facture IS NULL";
973 $sql .=
" ORDER BY f.fk_statut";
975 $resql = $db->query($sql);
977 $num = $db->num_rows($resql);
980 $obj = $db->fetch_object($resql);
981 $facid = $obj->rowid;
983 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
984 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
986 $res += $db->query($sql);
988 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
996 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
998 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1003 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1006 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1024 print
'<tr><td colspan="4">';
1027 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
1029 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
1030 $obj = $db->fetch_object($result);
1033 $sql =
"SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1034 $sql .=
" bu2.url_id as socid";
1035 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1036 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1037 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')";
1038 $sql .=
" WHERE pf.rowid IS NULL AND (p.fk_bank = bu.fk_bank AND bu.type = 'payment') AND bu.fk_bank = b.rowid";
1039 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1041 $resql = $db->query($sql);
1047 $num = $db->num_rows($resql);
1050 $obj = $db->fetch_object($resql);
1051 if ($obj->pamount == $obj->bamount && $obj->socid) {
1052 $row[$j][
'paymentid'] = $obj->rowid;
1053 $row[$j][
'pamount'] = $obj->pamount;
1054 $row[$j][
'fk_bank'] = $obj->fk_bank;
1055 $row[$j][
'bamount'] = $obj->bamount;
1056 $row[$j][
'socid'] = $obj->socid;
1057 $row[$j][
'datec'] = $obj->datec;
1070 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 2).
': '.count($row).
"<br>\n";
1074 for ($i = 0; $i < $num; $i++) {
1076 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>';
1080 $sql =
" SELECT distinct f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1081 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1082 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1083 $sql .=
" AND pf.fk_facture IS NULL";
1084 $sql .=
" ORDER BY f.fk_statut";
1086 $resql = $db->query($sql);
1088 $num = $db->num_rows($resql);
1091 $obj = $db->fetch_object($resql);
1092 $facid = $obj->rowid;
1094 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1095 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1097 $res += $db->query($sql);
1099 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1108 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1110 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1115 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1121 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiement DROP COLUMN fk_facture";
1131 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1148 print
'<tr><td colspan="4">';
1153 print
'<b>'.$langs->trans(
'MigrationContractsUpdate').
"</b><br>\n";
1155 $sql =
"SELECT c.rowid as cref, c.date_contrat, c.statut, c.fk_product, c.fk_facture, c.fk_user_author,";
1156 $sql .=
" p.ref, p.label, p.description, p.price, p.tva_tx, p.duration, cd.rowid";
1157 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c";
1158 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p";
1159 $sql .=
" ON c.fk_product = p.rowid";
1160 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"contratdet as cd";
1161 $sql .=
" ON c.rowid=cd.fk_contrat";
1162 $sql .=
" WHERE cd.rowid IS NULL AND p.rowid IS NOT NULL";
1163 $resql = $db->query($sql);
1169 $num = $db->num_rows($resql);
1172 print $langs->trans(
'MigrationContractsNumberToUpdate', $num).
"<br>\n";
1176 $obj = $db->fetch_object($resql);
1178 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"contratdet (";
1179 $sql .=
"fk_contrat, fk_product, statut, label, description,";
1180 $sql .=
"date_ouverture_prevue, date_ouverture, date_fin_validite, tva_tx, qty,";
1181 $sql .=
"subprice, price_ht, fk_user_author, fk_user_ouverture)";
1182 $sql .=
" VALUES (";
1183 $sql .= ((int) $obj->cref).
", ".($obj->fk_product ? ((int) $obj->fk_product) : 0).
", ";
1185 $sql .=
"'".$db->escape($obj->label).
"', null, ";
1186 $sql .= ($obj->date_contrat ?
"'".$db->idate($db->jdate($obj->date_contrat)).
"'" :
"null").
", ";
1189 $sql .= ((float) $obj->tva_tx).
", 1, ";
1190 $sql .= ((float) $obj->price).
", ".((float) $obj->price).
", ".((int) $obj->fk_user_author).
",";
1194 if ($db->query($sql)) {
1195 print $langs->trans(
'MigrationContractsLineCreation', $obj->cref).
"<br>\n";
1207 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1210 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1213 print $langs->trans(
'MigrationContractsNothingToUpdate').
"<br>\n";
1216 print $langs->trans(
'MigrationContractsFieldDontExist').
"<br>\n";
1233 print
'<tr><td colspan="4">';
1238 print
'<b>'.$langs->trans(
'MigrationBankTransfertsUpdate').
"</b><br>\n";
1240 $sql =
"SELECT ba.rowid as barowid, bb.rowid as bbrowid";
1241 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as bb, ".MAIN_DB_PREFIX.
"bank as ba";
1242 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu ON bu.fk_bank = ba.rowid";
1243 $sql .=
" WHERE ba.amount = -bb.amount AND ba.fk_account <> bb.fk_account";
1244 $sql .=
" AND ba.datev = bb.datev AND ba.datec = bb.datec";
1245 $sql .=
" AND bu.fk_bank IS NULL";
1246 $resql = $db->query($sql);
1252 $num = $db->num_rows($resql);
1255 print $langs->trans(
'MigrationBankTransfertsToUpdate', $num).
"<br>\n";
1259 $obj = $db->fetch_object($resql);
1261 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"bank_url (";
1262 $sql .=
"fk_bank, url_id, url, label, type";
1264 $sql .=
" VALUES (";
1265 $sql .= $obj->barowid.
",".$obj->bbrowid.
", '/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'";
1271 if (!$db->query($sql)) {
1282 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1285 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1288 print $langs->trans(
'MigrationBankTransfertsNothingToUpdate').
"<br>\n";
1307 print
'<tr><td colspan="4">';
1310 print
'<b>'.$langs->trans(
'MigrationContractsEmptyDatesUpdate').
"</b><br>\n";
1312 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set date_contrat=tms where date_contrat is null";
1314 $resql = $db->query($sql);
1318 if ($db->affected_rows($resql) > 0) {
1319 print $langs->trans(
'MigrationContractsEmptyDatesUpdateSuccess').
"<br>\n";
1321 print $langs->trans(
'MigrationContractsEmptyDatesNothingToUpdate').
"<br>\n";
1324 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=tms where datec is null";
1326 $resql = $db->query($sql);
1330 if ($db->affected_rows($resql) > 0) {
1331 print $langs->trans(
'MigrationContractsEmptyCreationDatesUpdateSuccess').
"<br>\n";
1333 print $langs->trans(
'MigrationContractsEmptyCreationDatesNothingToUpdate').
"<br>\n";
1349 print
'<tr><td colspan="4">';
1354 print
'<b>'.$langs->trans(
'MigrationContractsInvalidDatesUpdate').
"</b><br>\n";
1356 $sql =
"SELECT c.rowid as cref, c.datec, c.date_contrat, MIN(cd.date_ouverture) as datemin";
1357 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c,";
1358 $sql .=
" ".MAIN_DB_PREFIX.
"contratdet as cd";
1359 $sql .=
" WHERE c.rowid=cd.fk_contrat AND cd.date_ouverture IS NOT NULL";
1360 $sql .=
" GROUP BY c.rowid, c.date_contrat";
1361 $resql = $db->query($sql);
1367 $num = $db->num_rows($resql);
1370 $nbcontratsmodifie = 0;
1374 $obj = $db->fetch_object($resql);
1375 if ($obj->date_contrat > $obj->datemin) {
1376 $datemin = $db->jdate($obj->datemin);
1378 print $langs->trans(
'MigrationContractsInvalidDateFix', $obj->cref, $obj->date_contrat, $obj->datemin).
"<br>\n";
1379 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1380 $sql .=
" SET date_contrat='".$db->idate($datemin).
"'";
1381 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1382 $resql2 = $db->query($sql);
1387 $nbcontratsmodifie++;
1394 if ($nbcontratsmodifie) {
1395 print $langs->trans(
'MigrationContractsInvalidDatesNumber', $nbcontratsmodifie).
"<br>\n";
1397 print $langs->trans(
'MigrationContractsInvalidDatesNothingToUpdate').
"<br>\n";
1417 print
'<tr><td colspan="4">';
1420 print
'<b>'.$langs->trans(
'MigrationContractsIncoherentCreationDateUpdate').
"</b><br>\n";
1422 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=date_contrat where datec is null or datec > date_contrat";
1424 $resql = $db->query($sql);
1428 if ($db->affected_rows($resql) > 0) {
1429 print $langs->trans(
'MigrationContractsIncoherentCreationDateUpdateSuccess').
"<br>\n";
1431 print $langs->trans(
'MigrationContractsIncoherentCreationDateNothingToUpdate').
"<br>\n";
1447 print
'<tr><td colspan="4">';
1450 print
'<b>'.$langs->trans(
'MigrationReopeningContracts').
"</b><br>\n";
1452 $sql =
"SELECT c.rowid as cref FROM ".MAIN_DB_PREFIX.
"contrat as c, ".MAIN_DB_PREFIX.
"contratdet as cd";
1453 $sql .=
" WHERE cd.statut = 4 AND c.statut=2 AND c.rowid=cd.fk_contrat";
1455 $resql = $db->query($sql);
1459 if ($db->affected_rows($resql) > 0) {
1462 $num = $db->num_rows($resql);
1465 $nbcontratsmodifie = 0;
1469 $obj = $db->fetch_object($resql);
1471 print $langs->trans(
'MigrationReopenThisContract', $obj->cref).
"<br>\n";
1472 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1473 $sql .=
" SET statut = 1";
1474 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1475 $resql2 = $db->query($sql);
1480 $nbcontratsmodifie++;
1487 if ($nbcontratsmodifie) {
1488 print $langs->trans(
'MigrationReopenedContractsNumber', $nbcontratsmodifie).
"<br>\n";
1490 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1494 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1512 print
'<tr><td colspan="4">';
1514 print
'<b>'.$langs->trans(
'SuppliersInvoices').
"</b><br>\n";
1517 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiementfourn",
"fk_facture_fourn");
1518 $obj = $db->fetch_object($result);
1523 $select_sql =
'SELECT rowid, fk_facture_fourn, amount';
1524 $select_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn';
1525 $select_sql .=
' WHERE fk_facture_fourn IS NOT NULL';
1528 $select_resql = $db->query($select_sql);
1529 if ($select_resql) {
1530 $select_num = $db->num_rows($select_resql);
1534 while (($i < $select_num) && (!$error)) {
1535 $select_obj = $db->fetch_object($select_resql);
1538 $check_sql =
'SELECT fk_paiementfourn, fk_facturefourn';
1539 $check_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn';
1540 $check_sql .=
' WHERE fk_paiementfourn = '.((int) $select_obj->rowid).
' AND fk_facturefourn = '.((int) $select_obj->fk_facture_fourn);
1541 $check_resql = $db->query($check_sql);
1543 $check_num = $db->num_rows($check_resql);
1544 if ($check_num == 0) {
1548 print
'<tr><td colspan="4" class="nowrap"><b>'.$langs->trans(
'SuppliersInvoices').
'</b></td></tr>';
1549 print
'<tr><td>fk_paiementfourn</td><td>fk_facturefourn</td><td>'.$langs->trans(
'Amount').
'</td><td> </td></tr>';
1552 print
'<tr class="oddeven">';
1553 print
'<td>'.$select_obj->rowid.
'</td><td>'.$select_obj->fk_facture_fourn.
'</td><td>'.$select_obj->amount.
'</td>';
1555 $insert_sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn SET ';
1556 $insert_sql .=
' fk_paiementfourn = \''.$select_obj->rowid.
'\',
';
1557 $insert_sql .= ' fk_facturefourn = \
''.$select_obj->fk_facture_fourn.
'\',
';
1558 $insert_sql .= ' amount = \
''.$select_obj->amount.
'\'';
1559 $insert_resql = $db->query($insert_sql);
1561 if ($insert_resql) {
1563 print
'<td><span class="ok">'.$langs->trans(
"OK").
'</span></td>';
1565 print
'<td><span class="error">Error on insert</span></td>';
1581 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1585 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiementfourn DROP COLUMN fk_facture_fourn";
1588 print
'<tr><td>'.$langs->trans(
"Error").
'</td></tr>';
1592 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1609 $tmpmysoc->setMysoc(
$conf);
1613 print
'<tr><td colspan="4">';
1616 print
'<b>'.$langs->trans(
'MigrationInvoice').
"</b><br>\n";
1619 $sql =
"SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as vatrate, fd.total_ttc, fd.info_bits,";
1620 $sql .=
" f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f";
1621 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facturedet as fd, ".MAIN_DB_PREFIX.
"facture as f";
1622 $sql .=
" WHERE fd.fk_facture = f.rowid";
1623 $sql .=
" AND (((fd.total_ttc = 0 AND fd.remise_percent != 100) or fd.total_ttc IS NULL) or f.total_ttc IS NULL)";
1627 $resql = $db->query($sql);
1629 $num = $db->num_rows($resql);
1633 $obj = $db->fetch_object($resql);
1635 $rowid = $obj->rowid;
1637 $pu = $obj->subprice;
1638 $vatrate = $obj->vatrate;
1639 $remise_percent = $obj->remise_percent;
1640 $remise_percent_global = $obj->remise_percent_global;
1641 $total_ttc_f = $obj->total_ttc_f;
1642 $info_bits = $obj->info_bits;
1646 $facligne->fetch($rowid);
1648 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $facligne->product_type, $tmpmysoc);
1649 $total_ht = $result[0];
1650 $total_tva = $result[1];
1651 $total_ttc = $result[2];
1653 $facligne->total_ht = (float) $total_ht;
1654 $facligne->total_tva = (float) $total_tva;
1655 $facligne->total_ttc = (float) $total_ttc;
1657 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);
1659 $facligne->update_total();
1663 if (!$total_ttc_f) {
1665 $facture->id = $obj->facid;
1667 if ($facture->fetch($facture->id) >= 0) {
1668 if ($facture->update_price() > 0) {
1671 print
"Error id=".$facture->id;
1684 print $langs->trans(
"AlreadyDone");
1690 print
"Error #1 ".$db->error();
1712 $tmpmysoc->setMysoc(
$conf);
1716 print
'<tr><td colspan="4">';
1719 print
'<b>'.$langs->trans(
'MigrationProposal').
"</b><br>\n";
1722 $sql =
"SELECT pd.rowid, pd.qty, pd.subprice, pd.remise_percent, pd.tva_tx as vatrate, pd.info_bits,";
1723 $sql .=
" p.rowid as propalid, p.remise_percent as remise_percent_global";
1724 $sql .=
" FROM ".MAIN_DB_PREFIX.
"propaldet as pd, ".MAIN_DB_PREFIX.
"propal as p";
1725 $sql .=
" WHERE pd.fk_propal = p.rowid";
1726 $sql .=
" AND ((pd.total_ttc = 0 AND pd.remise_percent != 100) or pd.total_ttc IS NULL)";
1729 $resql = $db->query($sql);
1731 $num = $db->num_rows($resql);
1735 $obj = $db->fetch_object($resql);
1737 $rowid = $obj->rowid;
1739 $pu = $obj->subprice;
1740 $vatrate = $obj->vatrate;
1741 $remise_percent = $obj->remise_percent;
1742 $remise_percent_global = $obj->remise_percent_global;
1743 $info_bits = $obj->info_bits;
1747 $propalligne->fetch($rowid);
1749 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $propalligne->product_type, $tmpmysoc);
1750 $total_ht = $result[0];
1751 $total_tva = $result[1];
1752 $total_ttc = $result[2];
1754 $propalligne->total_ht = (float) $total_ht;
1755 $propalligne->total_tva = (float) $total_tva;
1756 $propalligne->total_ttc = (float) $total_ttc;
1758 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);
1760 $propalligne->update_total();
1765 print $langs->trans(
"AlreadyDone");
1772 print
"Error #1 ".$db->error();
1795 $tmpmysoc->setMysoc(
$conf);
1796 if (empty($tmpmysoc->country_id)) {
1797 $tmpmysoc->country_id = 0;
1800 print
'<tr><td colspan="4">';
1803 print
'<b>'.$langs->trans(
'MigrationContract').
"</b><br>\n";
1806 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1807 $sql .=
" c.rowid as contratid";
1808 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd, ".MAIN_DB_PREFIX.
"contrat as c";
1809 $sql .=
" WHERE cd.fk_contrat = c.rowid";
1810 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100 AND cd.subprice > 0) or cd.total_ttc IS NULL)";
1813 $resql = $db->query($sql);
1815 $num = $db->num_rows($resql);
1819 $obj = $db->fetch_object($resql);
1821 $rowid = $obj->rowid;
1823 $pu = $obj->subprice;
1824 $vatrate = $obj->vatrate;
1825 $remise_percent = $obj->remise_percent;
1826 $info_bits = $obj->info_bits;
1831 $contratligne->fetch($rowid);
1833 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, 0,
'HT', $info_bits, $contratligne->product_type, $tmpmysoc);
1834 $total_ht = $result[0];
1835 $total_tva = $result[1];
1836 $total_ttc = $result[2];
1838 $contratligne->total_ht = (float) $total_ht;
1839 $contratligne->total_tva = (float) $total_tva;
1840 $contratligne->total_ttc = (float) $total_ttc;
1842 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);
1844 $contratligne->update_total();
1849 print $langs->trans(
"AlreadyDone");
1856 print
"Error #1 ".$db->error();
1879 $tmpmysoc->setMysoc(
$conf);
1881 print
'<tr><td colspan="4">';
1884 print
'<b>'.$langs->trans(
'MigrationOrder').
"</b><br>\n";
1887 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1888 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1889 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"commande as c";
1890 $sql .=
" WHERE cd.fk_commande = c.rowid";
1891 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1894 $resql = $db->query($sql);
1896 $num = $db->num_rows($resql);
1900 $obj = $db->fetch_object($resql);
1902 $rowid = $obj->rowid;
1904 $pu = $obj->subprice;
1905 $vatrate = $obj->vatrate;
1906 $remise_percent = $obj->remise_percent;
1907 $remise_percent_global = $obj->remise_percent_global;
1908 $info_bits = $obj->info_bits;
1912 $commandeligne->fetch($rowid);
1914 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $tmpmysoc);
1915 $total_ht = $result[0];
1916 $total_tva = $result[1];
1917 $total_ttc = $result[2];
1919 $commandeligne->total_ht = (float) $total_ht;
1920 $commandeligne->total_tva = (float) $total_tva;
1921 $commandeligne->total_ttc = (float) $total_ttc;
1923 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);
1925 $commandeligne->update_total();
1930 print $langs->trans(
"AlreadyDone");
1947 print
"Error #1 ".$db->error();
1972 $tmpmysoc->setMysoc(
$conf);
1974 print
'<tr><td colspan="4">';
1977 print
'<b>'.$langs->trans(
'MigrationSupplierOrder').
"</b><br>\n";
1980 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1981 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1982 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cd, ".MAIN_DB_PREFIX.
"commande_fournisseur as c";
1983 $sql .=
" WHERE cd.fk_commande = c.rowid";
1984 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1987 $resql = $db->query($sql);
1989 $num = $db->num_rows($resql);
1993 $obj = $db->fetch_object($resql);
1995 $rowid = $obj->rowid;
1997 $pu = $obj->subprice;
1998 $vatrate = $obj->vatrate;
1999 $remise_percent = $obj->remise_percent;
2000 $remise_percent_global = $obj->remise_percent_global;
2001 $info_bits = $obj->info_bits;
2005 $commandeligne->fetch($rowid);
2007 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $mysoc);
2008 $total_ht = $result[0];
2009 $total_tva = $result[1];
2010 $total_ttc = $result[2];
2012 $commandeligne->total_ht = (float) $total_ht;
2013 $commandeligne->total_tva = (float) $total_tva;
2014 $commandeligne->total_ttc = (float) $total_ttc;
2016 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);
2018 $commandeligne->update_total();
2023 print $langs->trans(
"AlreadyDone");
2040 print
"Error #1 ".$db->error();
2065 if (isModEnabled(
'invoice')) {
2066 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
2068 if (count($modellist) == 0) {
2070 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('crabe','invoice')";
2071 $resql = $db->query($sql);
2078 if (isModEnabled(
'order')) {
2079 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
2081 if (count($modellist) == 0) {
2083 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('einstein','order')";
2084 $resql = $db->query($sql);
2091 if (isModEnabled(
"shipping")) {
2092 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
2094 if (count($modellist) == 0) {
2096 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('rouget','shipping')";
2097 $resql = $db->query($sql);
2120 print
'<tr><td colspan="4">';
2123 print
'<b>'.$langs->trans(
'MigrationShipmentOrderMatching').
"</b><br>\n";
2125 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"fk_commande");
2126 $obj = $db->fetch_object($result);
2132 $sql =
"SELECT e.rowid, e.fk_commande FROM ".MAIN_DB_PREFIX.
"expedition as e";
2133 $resql = $db->query($sql);
2136 $num = $db->num_rows($resql);
2140 $obj = $db->fetch_object($resql);
2142 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_exp (fk_expedition,fk_commande)";
2143 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2144 $resql2 = $db->query($sql);
2157 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition DROP COLUMN fk_commande";
2158 print $langs->trans(
'FieldRenamed').
"<br>\n";
2168 print $langs->trans(
'AlreadyDone').
"<br>\n";
2185 print
'<tr><td colspan="4">';
2188 print
'<b>'.$langs->trans(
'MigrationDeliveryOrderMatching').
"</b><br>\n";
2190 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_commande");
2191 $obj = $db->fetch_object($result);
2197 $sql =
"SELECT l.rowid, l.fk_commande,";
2198 $sql .=
" c.ref_client, c.date_livraison as delivery_date";
2199 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l, ".MAIN_DB_PREFIX.
"commande as c";
2200 $sql .=
" WHERE c.rowid = l.fk_commande";
2201 $resql = $db->query($sql);
2204 $num = $db->num_rows($resql);
2208 $obj = $db->fetch_object($resql);
2210 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_liv (fk_livraison,fk_commande)";
2211 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2212 $resql2 = $db->query($sql);
2215 $delivery_date = $db->jdate($obj->delivery_date);
2217 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2218 $sqlu .=
" ref_client = '".$db->escape($obj->ref_client).
"'";
2219 $sqlu .=
", date_livraison = '".$db->idate($delivery_date).
"'";
2220 $sqlu .=
" WHERE rowid = ".((int) $obj->rowid);
2221 $resql3 = $db->query($sqlu);
2237 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_commande";
2238 print $langs->trans(
'FieldRenamed').
"<br>\n";
2248 print $langs->trans(
'AlreadyDone').
"<br>\n";
2265 print
'<tr><td colspan="4">';
2268 print
'<b>'.$langs->trans(
'MigrationDeliveryDetail').
"</b><br>\n";
2272 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_commande_ligne");
2273 $obj = $db->fetch_object($result);
2279 $sql =
"SELECT cd.rowid, cd.fk_product, cd.description, cd.subprice, cd.total_ht";
2280 $sql .=
", ld.fk_livraison";
2281 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"livraisondet as ld";
2282 $sql .=
" WHERE ld.fk_commande_ligne = cd.rowid";
2283 $resql = $db->query($sql);
2286 $num = $db->num_rows($resql);
2290 $obj = $db->fetch_object($resql);
2292 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"livraisondet SET";
2293 $sql .=
" fk_product = ".((int) $obj->fk_product);
2294 $sql .=
",description = '".$db->escape($obj->description).
"'";
2295 $sql .=
",subprice = ".price2num($obj->subprice);
2296 $sql .=
",total_ht = ".price2num($obj->total_ht);
2297 $sql .=
" WHERE fk_commande_ligne = ".((int) $obj->rowid);
2298 $resql2 = $db->query($sql);
2301 $sql =
"SELECT total_ht";
2302 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
2303 $sql .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2304 $resql3 = $db->query($sql);
2307 $obju = $db->fetch_object($resql3);
2308 $total_ht = $obju->total_ht + $obj->total_ht;
2310 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2311 $sqlu .=
" total_ht = ".price2num($total_ht,
'MT');
2312 $sqlu .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2313 $resql4 = $db->query($sqlu);
2333 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet CHANGE fk_commande_ligne fk_origin_line integer";
2334 print $langs->trans(
'FieldRenamed').
"<br>\n";
2344 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_origin_line");
2345 $obj = $db->fetch_object($result);
2347 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet ADD COLUMN fk_origin_line integer after fk_livraison";
2350 print $langs->trans(
'AlreadyDone').
"<br>\n";
2367 print
'<tr><td colspan="4">';
2370 print
'<b>'.$langs->trans(
'MigrationStockDetail').
"</b><br>\n";
2376 $sql =
"SELECT SUM(reel) as total, fk_product";
2377 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_stock as ps";
2378 $sql .=
" GROUP BY fk_product";
2379 $resql = $db->query($sql);
2382 $num = $db->num_rows($resql);
2386 $obj = $db->fetch_object($resql);
2388 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET";
2389 $sql .=
" stock = ".price2num($obj->total,
'MS');
2390 $sql .=
" WHERE rowid = ".((int) $obj->fk_product);
2392 $resql2 = $db->query($sql);
2429 print
'<tr><td colspan="4">';
2432 print
'<b>'.$langs->trans(
'MigrationMenusDetail').
"</b><br>\n";
2436 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"menu_constraint")) {
2439 $sql =
"SELECT m.rowid, mc.action";
2440 $sql .=
" FROM ".MAIN_DB_PREFIX.
"menu_constraint as mc, ".MAIN_DB_PREFIX.
"menu_const as md, ".MAIN_DB_PREFIX.
"menu as m";
2441 $sql .=
" WHERE md.fk_menu = m.rowid AND md.fk_constraint = mc.rowid";
2442 $sql .=
" AND m.enabled = '1'";
2443 $resql = $db->query($sql);
2446 $num = $db->num_rows($resql);
2449 $obj = $db->fetch_object($resql);
2451 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"menu SET";
2452 $sql .=
" enabled = '".$db->escape($obj->action).
"'";
2453 $sql .=
" WHERE rowid = ".((int) $obj->rowid);
2454 $sql .=
" AND enabled = '1'";
2456 $resql2 = $db->query($sql);
2477 print $langs->trans(
'AlreadyDone').
"<br>\n";
2496 print
'<tr><td colspan="4">';
2499 print
'<b>'.$langs->trans(
'MigrationDeliveryAddress').
"</b><br>\n";
2503 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"co_exp")) {
2506 $sql =
"SELECT c.fk_adresse_livraison, ce.fk_expedition";
2507 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande as c";
2508 $sql .=
", ".MAIN_DB_PREFIX.
"co_exp as ce";
2509 $sql .=
" WHERE c.rowid = ce.fk_commande";
2510 $sql .=
" AND c.fk_adresse_livraison IS NOT NULL AND c.fk_adresse_livraison != 0";
2512 $resql = $db->query($sql);
2515 $num = $db->num_rows($resql);
2519 $obj = $db->fetch_object($resql);
2521 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
2522 $sql .=
" fk_adresse_livraison = '".$db->escape($obj->fk_adresse_livraison).
"'";
2523 $sql .=
" WHERE rowid = ".((int) $obj->fk_expedition);
2525 $resql2 = $db->query($sql);
2534 print $langs->trans(
'AlreadyDone').
"<br>\n";
2547 print $langs->trans(
'AlreadyDone').
"<br>\n";
2566 if (($db->type ==
'mysql' || $db->type ==
'mysqli')) {
2568 dolibarr_install_syslog(
"upgrade2::migrate_restore_missing_links Version of database too old to make this migrate action");
2572 print
'<tr><td colspan="4">';
2575 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (1)<br>\n";
2581 $table1 =
'facturedet';
2582 $field1 =
'fk_remise_except';
2583 $table2 =
'societe_remise_except';
2584 $field2 =
'fk_facture_line';
2588 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2589 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2590 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2591 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2592 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2595 $resql = $db->query($sql);
2598 $num = $db->num_rows($resql);
2602 $obj = $db->fetch_object($resql);
2604 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2606 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2607 $sql .=
" ".$db->sanitize($field2).
" = '".$db->escape($obj->rowid).
"'";
2608 $sql .=
" WHERE rowid = ".((int) $obj->field);
2610 $resql2 = $db->query($sql);
2619 print $langs->trans(
'AlreadyDone').
"<br>\n";
2635 print
'<tr><td colspan="4">';
2638 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (2)<br>\n";
2641 $table2 =
'facturedet';
2642 $field2 =
'fk_remise_except';
2643 $table1 =
'societe_remise_except';
2644 $field1 =
'fk_facture_line';
2648 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2649 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2650 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2651 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2652 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2655 $resql = $db->query($sql);
2658 $num = $db->num_rows($resql);
2662 $obj = $db->fetch_object($resql);
2664 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2666 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2667 $sql .=
" ".$db->sanitize($field2).
" = '".$db->escape($obj->rowid).
"'";
2668 $sql .=
" WHERE rowid = ".((int) $obj->field);
2670 $resql2 = $db->query($sql);
2679 print $langs->trans(
'AlreadyDone').
"<br>\n";
2694 return ($error ? -1 : 1);
2709 print
'<tr><td colspan="4">';
2712 print
'<b>'.$langs->trans(
'MigrationProjectUserResp').
"</b><br>\n";
2714 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"projet",
"fk_user_resp");
2715 $obj = $db->fetch_object($result);
2721 $sql =
"SELECT rowid, fk_user_resp FROM ".MAIN_DB_PREFIX.
"projet";
2722 $resql = $db->query($sql);
2725 $num = $db->num_rows($resql);
2729 $obj = $db->fetch_object($resql);
2731 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2732 $sql2 .=
"datecreate";
2733 $sql2 .=
", statut";
2734 $sql2 .=
", element_id";
2735 $sql2 .=
", fk_c_type_contact";
2736 $sql2 .=
", fk_socpeople";
2737 $sql2 .=
") VALUES (";
2738 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2740 $sql2 .=
", ".$obj->rowid;
2742 $sql2 .=
", ".$obj->fk_user_resp;
2745 if ($obj->fk_user_resp > 0) {
2746 $resql2 = $db->query($sql2);
2759 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"projet DROP COLUMN fk_user_resp";
2760 if ($db->query($sqlDrop)) {
2773 print $langs->trans(
'AlreadyDone').
"<br>\n";
2790 print
'<tr><td colspan="4">';
2793 print
'<b>'.$langs->trans(
'MigrationProjectTaskActors').
"</b><br>\n";
2795 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"projet_task_actors")) {
2800 $sql =
"SELECT fk_projet_task as fk_project_task, fk_user FROM ".MAIN_DB_PREFIX.
"projet_task_actors";
2801 $resql = $db->query($sql);
2804 $num = $db->num_rows($resql);
2808 $obj = $db->fetch_object($resql);
2810 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2811 $sql2 .=
"datecreate";
2812 $sql2 .=
", statut";
2813 $sql2 .=
", element_id";
2814 $sql2 .=
", fk_c_type_contact";
2815 $sql2 .=
", fk_socpeople";
2816 $sql2 .=
") VALUES (";
2817 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2819 $sql2 .=
", ".$obj->fk_project_task;
2821 $sql2 .=
", ".$obj->fk_user;
2824 $resql2 = $db->query($sql2);
2836 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.
"projet_task_actors";
2837 if ($db->query($sqlDrop)) {
2850 print $langs->trans(
'AlreadyDone').
"<br>\n";
2870 print
'<tr><td colspan="4">';
2873 print
'<b>'.$langs->trans(
'MigrationRelationshipTables', MAIN_DB_PREFIX.$table).
"</b><br>\n";
2877 if ($db->DDLInfoTable(MAIN_DB_PREFIX.$table)) {
2882 $sqlSelect =
"SELECT ".$fk_source.
", ".$fk_target;
2883 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.$table;
2885 $resql = $db->query($sqlSelect);
2888 $num = $db->num_rows($resql);
2892 $obj = $db->fetch_object($resql);
2894 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
2895 $sqlInsert .=
"fk_source";
2896 $sqlInsert .=
", sourcetype";
2897 $sqlInsert .=
", fk_target";
2898 $sqlInsert .=
", targettype";
2899 $sqlInsert .=
") VALUES (";
2900 $sqlInsert .= $obj->$fk_source;
2901 $sqlInsert .=
", '".$db->escape($sourcetype).
"'";
2902 $sqlInsert .=
", ".$obj->$fk_target;
2903 $sqlInsert .=
", '".$db->escape($targettype).
"'";
2906 $result = $db->query($sqlInsert);
2915 print $langs->trans(
'AlreadyDone').
"<br>\n";
2919 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.$table;
2920 if ($db->query($sqlDrop)) {
2933 print $langs->trans(
'AlreadyDone').
"<br>\n";
2951 print
'<tr><td colspan="4">';
2954 print
'<b>'.$langs->trans(
'MigrationProjectTaskTime').
"</b><br>\n";
2960 $sql =
"SELECT rowid, fk_element, element_duration";
2961 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_time";
2962 $resql = $db->query($sql);
2965 $num = $db->num_rows($resql);
2968 $totaltime = array();
2972 $obj = $db->fetch_object($resql);
2974 if ($obj->element_duration > 0) {
2977 list($hour, $min) = explode(
'.', $obj->element_duration);
2978 $hour = (int) $hour * 60 * 60;
2979 $min = (int) ((
float) (
'.'.$min)) * 3600;
2980 $newtime = $hour + $min;
2982 $sql2 =
"UPDATE ".MAIN_DB_PREFIX.
"element_time SET";
2983 $sql2 .=
" element_duration = ".((int) $newtime);
2984 $sql2 .=
" WHERE rowid = ".((int) $obj->rowid);
2986 $resql2 = $db->query($sql2);
2993 if (!empty($totaltime[$obj->fk_element])) {
2994 $totaltime[$obj->fk_element] += $newtime;
2996 $totaltime[$obj->fk_element] = $newtime;
2999 if (!empty($totaltime[$obj->fk_element])) {
3000 $totaltime[$obj->fk_element] += $obj->element_duration;
3002 $totaltime[$obj->fk_element] = $obj->element_duration;
3011 foreach ($totaltime as $taskid => $total_duration) {
3012 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"projet_task SET";
3013 $sql .=
" duration_effective = ".((int) $total_duration);
3014 $sql .=
" WHERE rowid = ".((int) $taskid);
3016 $resql = $db->query($sql);
3023 print $langs->trans(
'AlreadyDone').
"<br>\n";
3029 print $langs->trans(
'AlreadyDone').
"<br>\n";
3054 print
'<tr><td colspan="4">';
3057 print
'<b>'.$langs->trans(
'MigrationCustomerOrderShipping').
"</b><br>\n";
3061 $result1 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"ref_customer");
3062 $result2 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"date_delivery");
3063 $obj1 = $db->fetch_object($result1);
3064 $obj2 = $db->fetch_object($result2);
3065 if (!$obj1 && !$obj2) {
3070 $sqlAdd1 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN ref_customer varchar(30) AFTER entity";
3071 $sqlAdd2 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition";
3073 if ($db->query($sqlAdd1) && $db->query($sqlAdd2)) {
3074 $sqlSelect =
"SELECT e.rowid as shipping_id, c.ref_client, c.date_livraison as delivery_date";
3075 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"expedition as e";
3076 $sqlSelect .=
", ".MAIN_DB_PREFIX.
"element_element as el";
3077 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"commande as c ON c.rowid = el.fk_source AND el.sourcetype = 'commande'";
3078 $sqlSelect .=
" WHERE e.rowid = el.fk_target";
3079 $sqlSelect .=
" AND el.targettype = 'shipping'";
3081 $resql = $db->query($sqlSelect);
3084 $num = $db->num_rows($resql);
3088 $obj = $db->fetch_object($resql);
3090 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
3091 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_client).
"'";
3092 $sqlUpdate .=
", date_delivery = '".$db->escape($obj->delivery_date ? $obj->delivery_date :
'null').
"'";
3093 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->shipping_id);
3095 $result = $db->query($sqlUpdate);
3104 print $langs->trans(
'AlreadyDone').
"<br>\n";
3122 print $langs->trans(
'AlreadyDone').
"<br>\n";
3138 print
'<tr><td colspan="4">';
3141 print
'<b>'.$langs->trans(
'MigrationShippingDelivery').
"</b><br>\n";
3145 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_expedition");
3146 $obj = $db->fetch_object($result);
3152 $sqlSelect =
"SELECT rowid, fk_expedition";
3153 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
3154 $sqlSelect .=
" WHERE fk_expedition is not null";
3156 $resql = $db->query($sqlSelect);
3159 $num = $db->num_rows($resql);
3163 $obj = $db->fetch_object($resql);
3165 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
3166 $sqlInsert .=
"fk_source";
3167 $sqlInsert .=
", sourcetype";
3168 $sqlInsert .=
", fk_target";
3169 $sqlInsert .=
", targettype";
3170 $sqlInsert .=
") VALUES (";
3171 $sqlInsert .= $obj->fk_expedition;
3172 $sqlInsert .=
", 'shipping'";
3173 $sqlInsert .=
", ".$obj->rowid;
3174 $sqlInsert .=
", 'delivery'";
3177 $result = $db->query($sqlInsert);
3179 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET fk_expedition = NULL";
3180 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3182 $result = $db->query($sqlUpdate);
3195 print $langs->trans(
'AlreadyDone').
"<br>\n";
3199 $sqlDelete =
"DELETE FROM ".MAIN_DB_PREFIX.
"element_element WHERE sourcetype = 'commande' AND targettype = 'delivery'";
3200 $db->query($sqlDelete);
3205 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_expedition";
3206 $db->query($sqlDrop);
3216 print $langs->trans(
'AlreadyDone').
"<br>\n";
3233 print
'<tr><td colspan="4">';
3236 print
'<b>'.$langs->trans(
'MigrationShippingDelivery2').
"</b><br>\n";
3244 $sqlSelect =
"SELECT l.rowid as delivery_id, e.ref_customer, e.date_delivery";
3245 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l,";
3246 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"element_element as el,";
3247 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"expedition as e";
3248 $sqlSelect .=
" WHERE l.rowid = el.fk_target";
3249 $sqlSelect .=
" AND el.targettype = 'delivery'";
3250 $sqlSelect .=
" AND e.rowid = el.fk_source AND el.sourcetype = 'shipping'";
3251 $sqlSelect .=
" AND (e.ref_customer IS NOT NULL OR e.date_delivery IS NOT NULL)";
3253 $sqlSelect .=
" AND (l.ref_customer IS NULL".($db->type !=
'pgsql' ?
" or l.ref_customer = ''" :
"").
")";
3254 $sqlSelect .=
" AND (l.date_delivery IS NULL".($db->type !=
'pgsql' ?
" or l.date_delivery = ''" :
"").
")";
3256 $resql = $db->query($sqlSelect);
3259 $num = $db->num_rows($resql);
3263 $obj = $db->fetch_object($resql);
3265 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
3266 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_customer).
"',";
3267 $sqlUpdate .=
" date_delivery = ".($obj->date_delivery ?
"'".$db->escape($obj->date_delivery).
"'" :
'null');
3268 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->delivery_id);
3270 $result = $db->query($sqlUpdate);
3279 print $langs->trans(
'AlreadyDone').
"<br>\n";
3306 print
'<tr><td colspan="4">';
3309 print
'<b>'.$langs->trans(
'MigrationActioncommElement').
"</b><br>\n";
3312 'propal' =>
'propalrowid',
3313 'order' =>
'fk_commande',
3314 'invoice' =>
'fk_facture',
3315 'contract' =>
'fk_contract',
3316 'order_supplier' =>
'fk_supplier_order',
3317 'invoice_supplier' =>
'fk_supplier_invoice'
3320 foreach ($elements as $type => $field) {
3321 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"actioncomm", $field);
3322 $obj = $db->fetch_object($result);
3328 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"actioncomm SET ";
3329 $sql .=
"fk_element = ".$db->sanitize($field).
", elementtype = '".$db->escape($type).
"'";
3330 $sql .=
" WHERE ".$db->sanitize($field).
" IS NOT NULL";
3331 $sql .=
" AND fk_element IS NULL";
3332 $sql .=
" AND elementtype IS NULL";
3334 $resql = $db->query($sql);
3348 print $langs->trans(
'AlreadyDone').
"<br>\n";
3365 print
'<tr><td colspan="4">';
3368 print
'<b>'.$langs->trans(
'MigrationPaymentMode').
"</b><br>\n";
3371 'old_id' => array(5, 8, 9, 10, 11),
3372 'new_id' => array(50, 51, 52, 53, 54),
3373 'code' => array(
'VAD',
'TRA',
'LCR',
'FAC',
'PRO'),
3374 'tables' => array(
'commande_fournisseur',
'commande',
'facture_rec',
'facture',
'propal')
3378 foreach ($elements[
'old_id'] as $key => $old_id) {
3383 $sqlSelect =
"SELECT id";
3384 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"c_paiement";
3385 $sqlSelect .=
" WHERE id = ".((int) $old_id);
3386 $sqlSelect .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3388 $resql = $db->query($sqlSelect);
3390 $num = $db->num_rows($resql);
3396 $sqla =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET";
3397 $sqla .=
" fk_paiement = ".((int) $elements[
'new_id'][$key]);
3398 $sqla .=
" WHERE fk_paiement = ".((int) $old_id);
3399 $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]).
"')";
3400 $resqla = $db->query($sqla);
3402 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"c_paiement SET";
3403 $sql .=
" id = ".((int) $elements[
'new_id'][$key]);
3404 $sql .=
" WHERE id = ".((int) $old_id);
3405 $sql .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3406 $resql = $db->query($sql);
3408 if ($resqla && $resql) {
3409 foreach ($elements[
'tables'] as $table) {
3410 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table.
" SET ";
3411 $sql .=
"fk_mode_reglement = ".((int) $elements[
'new_id'][$key]);
3412 $sql .=
" WHERE fk_mode_reglement = ".((int) $old_id);
3414 $resql = $db->query($sql);
3437 print $langs->trans(
'AlreadyDone').
"<br>\n";
3455 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"categorie_association");
3457 $obj = $db->fetch_object($result);
3460 $children = array();
3461 $sql =
"SELECT fk_categorie_mere, fk_categorie_fille";
3462 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3464 $resql = $db->query($sql);
3466 $num = $db->num_rows($resql);
3467 while ($obj = $db->fetch_object($resql)) {
3468 if (!isset($children[$obj->fk_categorie_fille])) {
3469 if ($obj->fk_categorie_mere != $obj->fk_categorie_fille) {
3470 $children[$obj->fk_categorie_fille] = 1;
3471 $couples[$obj->fk_categorie_mere.
'_'.$obj->fk_categorie_fille] = array(
'mere' => $obj->fk_categorie_mere,
'fille' => $obj->fk_categorie_fille);
3479 if (count($couples) > 0 && $num > count($couples)) {
3485 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_association";
3487 $resqld = $db->query($sql);
3490 foreach ($couples as $key => $val) {
3491 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_association(fk_categorie_mere,fk_categorie_fille)";
3492 $sql .=
" VALUES(".((int) $val[
'mere']).
", ".((int) $val[
'fille']).
")";
3494 $resqli = $db->query($sql);
3502 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3503 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Success").
' ('.$num.
'=>'.count($couples).
')</td></tr>';
3506 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3507 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Failed").
'</td></tr>';
3512 print
'<tr><td>'.$langs->trans(
"Error").
'</td>';
3513 print
'<td class="right"><div class="error">'.$db->lasterror().
'</div></td></tr>';
3530 print
'<tr><td colspan="4">';
3533 print
'<b>'.$langs->trans(
'MigrationCategorieAssociation').
"</b><br>\n";
3537 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"categorie_association")) {
3542 $sqlSelect =
"SELECT fk_categorie_mere, fk_categorie_fille";
3543 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3545 $resql = $db->query($sqlSelect);
3548 $num = $db->num_rows($resql);
3552 $obj = $db->fetch_object($resql);
3554 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"categorie SET ";
3555 $sqlUpdate .=
"fk_parent = ".((int) $obj->fk_categorie_mere);
3556 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->fk_categorie_fille);
3558 $result = $db->query($sqlUpdate);
3567 print $langs->trans(
'AlreadyDone').
"<br>\n";
3580 print $langs->trans(
'AlreadyDone').
"<br>\n";
3596 print
'<tr><td colspan="4">';
3599 print
'<b>'.$langs->trans(
'MigrationEvents').
"</b><br>\n";
3607 $sqlSelect =
"SELECT a.id, a.fk_user_action";
3608 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3609 $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";
3610 $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')";
3611 $sqlSelect .=
" ORDER BY a.id";
3614 $resql = $db->query($sqlSelect);
3617 $num = $db->num_rows($resql);
3621 $obj = $db->fetch_object($resql);
3623 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3624 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'user', ".((int) $obj->fk_user_action).
")";
3626 $result = $db->query($sqlUpdate);
3635 print $langs->trans(
'AlreadyDone').
"<br>\n";
3662 print
'<tr><td colspan="4">';
3665 print
'<b>'.$langs->trans(
'MigrationEventsContact').
"</b><br>\n";
3673 $sqlSelect =
"SELECT a.id, a.fk_contact";
3674 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3675 $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";
3676 $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')";
3677 $sqlSelect .=
" ORDER BY a.id";
3680 $resql = $db->query($sqlSelect);
3683 $num = $db->num_rows($resql);
3687 $obj = $db->fetch_object($resql);
3689 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3690 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'socpeople', ".((int) $obj->fk_contact).
")";
3692 $result = $db->query($sqlUpdate);
3701 print $langs->trans(
'AlreadyDone').
"<br>\n";
3731 require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
3733 print
'<tr><td colspan="4">';
3736 print
'<b>'.$langs->trans(
'MigrationResetBlockedLog').
"</b><br>\n";
3744 $sqlSelect =
"SELECT DISTINCT entity";
3745 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"blockedlog";
3749 $resql = $db->query($sqlSelect);
3752 $num = $db->num_rows($resql);
3756 $obj = $db->fetch_object($resql);
3758 print
'Process entity '.$obj->entity;
3760 $sqlSearch =
"SELECT count(rowid) as nb FROM ".MAIN_DB_PREFIX.
"blockedlog WHERE action = 'MODULE_SET' and entity = ".((int) $obj->entity);
3761 $resqlSearch = $db->query($sqlSearch);
3763 $objSearch = $db->fetch_object($resqlSearch);
3765 if ($objSearch && $objSearch->nb == 0) {
3766 print
' - Record for entity must be reset...';
3768 $sqlUpdate =
"DELETE FROM ".MAIN_DB_PREFIX.
"blockedlog";
3769 $sqlUpdate .=
" WHERE entity = ".((int) $obj->entity);
3770 $resqlUpdate = $db->query($sqlUpdate);
3771 if (!$resqlUpdate) {
3780 $object->entity = $obj->entity;
3784 $b->setObjectData(
$object,
'MODULE_SET', 0);
3786 $res = $b->create($user);
3792 print
' - '.$langs->trans(
'AlreadyInV7').
'<br>';
3801 print $langs->trans(
'NothingToDo').
"<br>\n";
3828 print
'<tr><td colspan="4">';
3831 print
'<b>'.$langs->trans(
'MigrationRemiseEntity').
"</b><br>\n";
3839 $sqlSelect =
"SELECT sr.rowid, s.entity";
3840 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise as sr, ".MAIN_DB_PREFIX.
"societe as s";
3841 $sqlSelect .=
" WHERE sr.fk_soc = s.rowid and sr.entity != s.entity";
3845 $resql = $db->query($sqlSelect);
3848 $num = $db->num_rows($resql);
3852 $obj = $db->fetch_object($resql);
3854 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise SET";
3855 $sqlUpdate .=
" entity = ".$obj->entity;
3856 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3858 $result = $db->query($sqlUpdate);
3868 print $langs->trans(
'AlreadyDone').
"<br>\n";
3894 print
'<tr><td colspan="4">';
3897 print
'<b>'.$langs->trans(
'MigrationRemiseExceptEntity').
"</b><br>\n";
3905 $sqlSelect =
"SELECT sr.rowid, sr.fk_soc, sr.fk_facture_source, sr.fk_facture, sr.fk_facture_line";
3906 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as sr";
3909 $resql = $db->query($sqlSelect);
3912 $num = $db->num_rows($resql);
3916 $obj = $db->fetch_object($resql);
3918 if (!empty($obj->fk_facture_source) || !empty($obj->fk_facture)) {
3919 $fk_facture = (!empty($obj->fk_facture_source) ? $obj->fk_facture_source : $obj->fk_facture);
3921 $sqlSelect2 =
"SELECT f.entity";
3922 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f";
3923 $sqlSelect2 .=
" WHERE f.rowid = ".((int) $fk_facture);
3924 } elseif (!empty($obj->fk_facture_line)) {
3925 $sqlSelect2 =
"SELECT f.entity";
3926 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f, ".MAIN_DB_PREFIX.
"facturedet as fd";
3927 $sqlSelect2 .=
" WHERE fd.rowid = ".((int) $obj->fk_facture_line);
3928 $sqlSelect2 .=
" AND fd.fk_facture = f.rowid";
3930 $sqlSelect2 =
"SELECT s.entity";
3931 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
3932 $sqlSelect2 .=
" WHERE s.rowid = ".((int) $obj->fk_soc);
3935 $resql2 = $db->query($sqlSelect2);
3937 if ($db->num_rows($resql2) > 0) {
3938 $obj2 = $db->fetch_object($resql2);
3940 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise_except SET";
3941 $sqlUpdate .=
" entity = ".((int) $obj2->entity);
3942 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3944 $result = $db->query($sqlUpdate);
3959 print $langs->trans(
'AlreadyDone').
"<br>\n";
3986 print
'<tr><td colspan="4">';
3988 print
'<b>'.$langs->trans(
'MigrationUserRightsEntity').
"</b><br>\n";
3996 $sqlSelect =
"SELECT u.rowid, u.entity";
3997 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"user as u";
3998 $sqlSelect .=
" WHERE u.entity > 1";
4001 $resql = $db->query($sqlSelect);
4004 $num = $db->num_rows($resql);
4008 $obj = $db->fetch_object($resql);
4010 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"user_rights SET";
4011 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4012 $sqlUpdate .=
" WHERE fk_user = ".((int) $obj->rowid);
4014 $result = $db->query($sqlUpdate);
4024 print $langs->trans(
'AlreadyDone').
"<br>\n";
4051 print
'<tr><td colspan="4">';
4053 print
'<b>'.$langs->trans(
'MigrationUserGroupRightsEntity').
"</b><br>\n";
4061 $sqlSelect =
"SELECT u.rowid, u.entity";
4062 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"usergroup as u";
4063 $sqlSelect .=
" WHERE u.entity > 1";
4066 $resql = $db->query($sqlSelect);
4069 $num = $db->num_rows($resql);
4073 $obj = $db->fetch_object($resql);
4075 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"usergroup_rights SET";
4076 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4077 $sqlUpdate .=
" WHERE fk_usergroup = ".((int) $obj->rowid);
4079 $result = $db->query($sqlUpdate);
4089 print $langs->trans(
'AlreadyDone').
"<br>\n";
4120 if (is_dir(DOL_DATA_ROOT.$oldname) && !file_exists(DOL_DATA_ROOT.$newname)) {
4121 dolibarr_install_syslog(
"upgrade2::migrate_rename_directories move ".DOL_DATA_ROOT.$oldname.
' into '.DOL_DATA_ROOT.$newname);
4122 @rename(DOL_DATA_ROOT.$oldname, DOL_DATA_ROOT.$newname);
4142 $filetodeletearray = array(
4143 '/core/ajax/ajaxcompanies.php',
4144 '/core/triggers/interface_demo.class.php',
4145 '/core/menus/barre_left/default.php',
4146 '/core/menus/barre_top/default.php',
4147 '/core/modules/modComptabiliteExpert.class.php',
4148 '/core/modules/modCommercial.class.php',
4149 '/core/modules/modProduit.class.php',
4150 '/core/modules/modSkype.class.php',
4151 '/core/triggers/interface_modWebcalendar_Webcalsynchro.class.php',
4152 '/core/triggers/interface_modCommande_Ecotax.class.php',
4153 '/core/triggers/interface_modCommande_fraisport.class.php',
4154 '/core/triggers/interface_modPropale_PropalWorkflow.class.php',
4155 '/core/triggers/interface_99_modWebhook_WebhookTriggers.class.php',
4156 '/core/triggers/interface_99_modZapier_ZapierTriggers.class.php',
4157 '/core/menus/smartphone/iphone.lib.php',
4158 '/core/menus/smartphone/iphone_backoffice.php',
4159 '/core/menus/smartphone/iphone_frontoffice.php',
4160 '/core/menus/standard/auguria_backoffice.php',
4161 '/core/menus/standard/auguria_frontoffice.php',
4162 '/core/menus/standard/eldy_backoffice.php',
4163 '/core/menus/standard/eldy_frontoffice.php',
4164 '/core/modules/export/export_excel.modules.php',
4165 '/core/modules/export/export_csv.modules.php',
4166 '/core/modules/export/exportcsv.modules.php',
4167 '/core/modules/export/export_excel2007new.modules.php',
4168 '/core/modules/facture/pdf_crabe.modules.php',
4169 '/core/modules/facture/pdf_oursin.modules.php',
4170 '/core/modules/mailings/contacts2.modules.php',
4171 '/core/modules/mailings/contacts3.modules.php',
4172 '/core/modules/mailings/contacts4.modules.php',
4173 '/core/modules/mailings/framboise.modules.php',
4174 '/core/modules/mailings/dolibarr_services_expired.modules.php',
4175 '/core/modules/mailings/peche.modules.php',
4176 '/core/modules/mailings/poire.modules.php',
4177 '/core/modules/mailings/kiwi.modules.php',
4178 '/core/boxes/box_members.php',
4180 '/includes/restler/framework/Luracast/Restler/Data/Object.php',
4181 '/includes/nusoap/lib/class.*',
4182 '/phenix/inc/triggers/interface_modPhenix_Phenixsynchro.class.php',
4183 '/webcalendar/inc/triggers/interface_modWebcalendar_webcalsynchro.class.php',
4185 '/api/class/api_generic.class.php',
4186 '/asterisk/cidlookup.php',
4187 '/categories/class/api_category.class.php',
4188 '/categories/class/api_deprecated_category.class.php',
4189 '/compta/facture/class/api_invoice.class.php',
4190 '/commande/class/api_commande.class.php',
4191 '/partnership/class/api_partnership.class.php',
4192 '/product/class/api_product.class.php',
4193 '/recruitment/class/api_recruitment.class.php',
4194 '/societe/class/api_contact.class.php',
4195 '/societe/class/api_thirdparty.class.php',
4196 '/support/online.php',
4197 '/takepos/class/actions_takepos.class.php',
4198 '/user/class/api_user.class.php',
4200 '/install/mysql/tables/llx_c_ticketsup_category.key.sql',
4201 '/install/mysql/tables/llx_c_ticketsup_category.sql',
4202 '/install/mysql/tables/llx_c_ticketsup_severity.key.sql',
4203 '/install/mysql/tables/llx_c_ticketsup_severity.sql',
4204 '/install/mysql/tables/llx_c_ticketsup_type.key.sql',
4205 '/install/mysql/tables/llx_c_ticketsup_type.sql'
4214 foreach ($filetodeletearray as $filetodelete) {
4216 if (preg_match(
'/\*/', $filetodelete) || file_exists(DOL_DOCUMENT_ROOT.$filetodelete)) {
4218 $result =
dol_delete_file(DOL_DOCUMENT_ROOT.$filetodelete, 0, (preg_match(
'/\*/', $filetodelete) ? 1 : 0), 0,
null,
true, 0);
4220 $langs->load(
"errors");
4221 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteFile", DOL_DOCUMENT_ROOT.$filetodelete);
4222 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4247 $filetodeletearray = array(
4248 DOL_DOCUMENT_ROOT.
'/core/modules/facture/terre',
4249 DOL_DOCUMENT_ROOT.
'/core/modules/facture/mercure',
4253 if (!empty($_SERVER[
"WINDIR"])) {
4254 $filetodeletearray[] = DOL_DOCUMENT_ROOT.
'/includes/phpoffice/PhpSpreadsheet';
4257 foreach ($filetodeletearray as $filetodelete) {
4259 if (file_exists($filetodelete)) {
4263 $langs->load(
"errors");
4264 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteDir", $filetodelete);
4265 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4289 if (count($listofmodule) == 0) {
4293 if (!is_object($user)) {
4294 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4295 $user =
new User($db);
4298 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules force=".$force.
", listofmodule=".implode(
',', array_keys($listofmodule)));
4300 $reloadactionformodules = array(
4301 'MAIN_MODULE_AGENDA' => array(
'class' =>
'modAgenda',
'remove' => 1),
4302 'MAIN_MODULE_API' => array(
'class' =>
'modApi'),
4303 'MAIN_MODULE_BARCODE' => array(
'class' =>
'modBarcode',
'remove' => 1),
4304 'MAIN_MODULE_BLOCKEDLOG' => array(
'class' =>
'modBlockedLog',
'deleteinsertmenus' => 1),
4305 'MAIN_MODULE_CRON' => array(
'class' =>
'modCron',
'remove' => 1),
4306 'MAIN_MODULE_EXTERNALSITE' => array(
'class' =>
'modExternalSite',
'remove' => 1),
4307 'MAIN_MODULE_SOCIETE' => array(
'class' =>
'modSociete',
'remove' => 1),
4308 'MAIN_MODULE_PRODUIT' => array(
'class' =>
'modProduct'),
4309 'MAIN_MODULE_SERVICE' => array(
'class' =>
'modService'),
4310 'MAIN_MODULE_COMMANDE' => array(
'class' =>
'modCommande'),
4311 'MAIN_MODULE_DON' => array(
'class' =>
'modDon'),
4312 'MAIN_MODULE_FACTURE' => array(
'class' =>
'modFacture'),
4313 'MAIN_MODULE_FICHEINTER' => array(
'class' =>
'modFicheinter'),
4314 'MAIN_MODULE_FOURNISSEUR' => array(
'class' =>
'modFournisseur'),
4315 'MAIN_MODULE_EXPEDITION' => array(
'class' =>
'modExpedition'),
4316 'MAIN_MODULE_EXPENSEREPORT' => array(
'class' =>
'modExpenseReport'),
4317 'MAIN_MODULE_EVENTORGANIZATION' => array(
'class' =>
'modEventOrganization',
'remove' => 1),
4318 'MAIN_MODULE_ECM' => array(
'class' =>
'modECM',
'remove' => 1),
4319 'MAIN_MODULE_HOLIDAY' => array(
'class' =>
'modHoliday',
'remove' => 1),
4320 'MAIN_MODULE_KNOWLEDGEMANAGEMENT' => array(
'class' =>
'modKnowledgeManagement',
'remove' => 1),
4321 'MAIN_MODULE_LOAN' => array(
'class' =>
'modLoan',
'remove' => 1),
4322 'MAIN_MODULE_PAYBOX' => array(
'class' =>
'modPaybox',
'remove' => 1),
4323 'MAIN_MODULE_PROPAL' => array(
'class' =>
'modPropale'),
4324 'MAIN_MODULE_SUPPLIERPROPOSAL' => array(
'class' =>
'modSupplierProposal',
'remove' => 1),
4325 'MAIN_MODULE_OPENSURVEY' => array(
'class' =>
'modOpenSurvey',
'remove' => 1),
4326 'MAIN_MODULE_PRODUCTBATCH' => array(
'class' =>
'modProductBatch',
'remove' => 1),
4327 'MAIN_MODULE_TAKEPOS' => array(
'class' =>
'modTakePos',
'remove' => 1),
4328 'MAIN_MODULE_VARIANTS' => array(
'class' =>
'modVariants',
'remove' => 1),
4329 'MAIN_MODULE_EMAILCOLLECTOR' => array(
'class' =>
'modEmailCollector',
'remove' => 1),
4332 foreach ($listofmodule as $moduletoreload => $reloadmode) {
4333 if (empty($moduletoreload) || (empty(
$conf->global->$moduletoreload) && !$force)) {
4339 if (!empty($reloadactionformodules[$moduletoreload])) {
4340 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreload.
" with mode ".$reloadmode);
4342 $val = $reloadactionformodules[$moduletoreload];
4343 $classformodule = $val[
'class'];
4344 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/'.$classformodule.
'.class.php';
4346 $mod =
new $classformodule($db);
4347 if (!empty($val[
'remove'])) {
4348 $mod->remove(
'noboxes');
4350 if (!empty($val[
'deleteinsertmenus'])) {
4352 $mod->delete_menus();
4353 $mod->insert_menus();
4355 $mod->init($reloadmode);
4360 $tmp = preg_match(
'/MAIN_MODULE_([a-zA-Z0-9]+)/', $moduletoreload, $reg);
4361 if (!empty($reg[1])) {
4362 if (strtoupper($moduletoreload) == $moduletoreload) {
4363 $moduletoreloadshort = ucfirst(strtolower($reg[1]));
4365 $moduletoreloadshort = $reg[1];
4368 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreloadshort.
" with mode ".$reloadmode.
" (generic code)");
4370 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php';
4372 $classname =
'mod'.$moduletoreloadshort;
4373 $mod =
new $classname($db);
4374 '@phan-var-force DolibarrModules $mod';
4377 $mod->delete_menus();
4378 $mod->init($reloadmode);
4380 dolibarr_install_syslog(
'Failed to include '.DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4382 $res = @
dol_include_once(strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4384 $classname =
'mod'.$moduletoreloadshort;
4385 $mod =
new $classname($db);
4386 '@phan-var-force DolibarrModules $mod';
4387 $mod->init($reloadmode);
4389 dolibarr_install_syslog(
'Failed to include '.strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4390 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4396 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4401 if (!empty($mod) && is_object($mod)) {
4402 print
'<tr class="trforrunsql"><td colspan="4">';
4403 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: ';
4404 print $langs->trans(
'MigrationReloadModule').
' '.$mod->getName();
4405 print
"<!-- (".$reloadmode.
") -->";
4430 $listofmenuhandler = array();
4433 $listofmenuhandler[
'auguria'] = 1;
4436 foreach ($listofmenuhandler as $key => $val) {
4437 print
'<tr class="trforrunsql"><td colspan="4">';
4441 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: '.$langs->trans(
'MenuHandler').
" ".$key.
"<br>\n";
4444 $dir = DOL_DOCUMENT_ROOT.
"/core/menus/";
4445 $file =
'init_menu_'.$key.
'.sql';
4446 if (file_exists($dir.$file)) {
4447 $result =
run_sql($dir.$file, 1, 0, 1, $key);
4463 global
$conf, $db, $langs, $user;
4465 if (!is_object($user)) {
4466 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4467 $user =
new User($db);
4470 print
'<tr><td colspan="4">';
4472 print
'<b>'.$langs->trans(
'MigrationProductLotPath').
"</b><br>\n";
4474 $sql =
"SELECT rowid, entity, batch, fk_product from ".MAIN_DB_PREFIX.
"product_lot";
4475 $resql = $db->query($sql);
4478 $modulepart=
"product_batch";
4482 while ($obj = $db->fetch_object($resql)) {
4483 $entity = (empty($obj->entity) ? 1 : $obj->entity);
4485 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/'.
$conf->productbatch->multidir_output[$entity];
4487 $dir =
$conf->productbatch->multidir_output[$entity];
4491 $lot->id = $obj->rowid;
4492 $lot->ref = $obj->id;
4493 $lot->batch = $obj->batch;
4494 $lot->entity = $obj->entity;
4495 $lot->fk_product = $obj->fk_product;
4497 $savref = $lot->ref;
4499 $lot->ref = $obj->batch;
4500 $origin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4502 $lot->ref = $savref;
4503 $destin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4525 global
$conf, $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 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;
4546 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4548 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4550 $dir =
$conf->user->multidir_output[$entity];
4555 $origin = $dir.
'/'.
get_exdir($fuser->id, 2, 0, 1, $fuser,
'user');
4556 $destin = $dir.
'/'.$fuser->id;
4564 $handle = opendir($origin_osencoded);
4565 if (is_resource($handle)) {
4566 while (($file = readdir($handle)) !==
false) {
4567 if ($file ==
'.' || $file ==
'..') {
4572 $thumbs = opendir($origin_osencoded.
'/'.$file);
4573 if (is_resource($thumbs)) {
4575 while (($thumb = readdir($thumbs)) !==
false) {
4577 if ($thumb ==
'.' || $thumb ==
'..') {
4583 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4593 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4614 global $db, $langs, $user;
4616 print
'<tr><td colspan="4">';
4618 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4620 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4621 $fuser =
new User($db);
4622 if (!is_object($user)) {
4626 $sql =
"SELECT rowid as uid, entity, photo from ".MAIN_DB_PREFIX.
"user";
4627 $resql = $db->query($sql);
4629 while ($obj = $db->fetch_object($resql)) {
4631 $fuser->id = $obj->uid;
4632 $fuser->entity = $obj->entity;
4633 $fuser->photo = $obj->photo;
4636 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4638 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4640 $dir = DOL_DATA_ROOT.
'/users';
4645 $origin = $dir.
'/'.$fuser->id;
4646 $destin = $dir.
'/'.$fuser->id.
'/photos';
4654 $handle = opendir($origin_osencoded);
4655 if (is_resource($handle)) {
4656 while (($file = readdir($handle)) !==
false) {
4657 if ($file ==
'.' || $file ==
'..' || $file ==
'photos') {
4660 if (!empty($fuser->photo) && ($file != $fuser->photo && $file !=
'thumbs')) {
4665 $thumbs = opendir($origin_osencoded.
'/'.$file);
4666 if (is_resource($thumbs)) {
4668 while (($thumb = readdir($thumbs)) !==
false) {
4670 if ($thumb ==
'.' || $thumb ==
'..') {
4676 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4685 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4722 print
'<tr><td colspan="4">';
4723 $sql =
'SELECT rowid, socialnetworks';
4724 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'user WHERE';
4725 $sql .=
" skype IS NOT NULL OR skype <> ''";
4726 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4727 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4728 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4729 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4730 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4731 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4732 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4733 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4735 $resql = $db->query($sql);
4737 while ($obj = $db->fetch_object($resql)) {
4738 $arraysocialnetworks = array();
4739 if (!empty($obj->skype)) {
4740 $arraysocialnetworks[
'skype'] = $obj->skype;
4742 if (!empty($obj->twitter)) {
4743 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4745 if (!empty($obj->facebook)) {
4746 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4748 if (!empty($obj->linkedin)) {
4749 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4751 if (!empty($obj->instagram)) {
4752 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4754 if (!empty($obj->snapchat)) {
4755 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4757 if (!empty($obj->googleplus)) {
4758 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4760 if (!empty($obj->youtube)) {
4761 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4763 if (!empty($obj->whatsapp)) {
4764 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4766 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4767 $obj->socialnetworks =
'[]';
4769 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4770 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"user SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
4771 $sqlupd .=
', skype=null';
4772 $sqlupd .=
', twitter=null';
4773 $sqlupd .=
', facebook=null';
4774 $sqlupd .=
', linkedin=null';
4775 $sqlupd .=
', instagram=null';
4776 $sqlupd .=
', snapchat=null';
4777 $sqlupd .=
', googleplus=null';
4778 $sqlupd .=
', youtube=null';
4779 $sqlupd .=
', whatsapp=null';
4780 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4782 $resqlupd = $db->query($sqlupd);
4797 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Users').
"</b><br>\n";
4811 print
'<tr><td colspan="4">';
4814 print
'<tr><td colspan="4">';
4815 $sql =
'SELECT rowid, socialnetworks';
4816 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'adherent WHERE ';
4817 $sql .=
" skype IS NOT NULL OR skype <> ''";
4818 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4819 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4820 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4821 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4822 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4823 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4824 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4825 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4827 $resql = $db->query($sql);
4829 while ($obj = $db->fetch_object($resql)) {
4830 $arraysocialnetworks = array();
4831 if (!empty($obj->skype)) {
4832 $arraysocialnetworks[
'skype'] = $obj->skype;
4834 if (!empty($obj->twitter)) {
4835 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4837 if (!empty($obj->facebook)) {
4838 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4840 if (!empty($obj->linkedin)) {
4841 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4843 if (!empty($obj->instagram)) {
4844 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4846 if (!empty($obj->snapchat)) {
4847 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4849 if (!empty($obj->googleplus)) {
4850 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4852 if (!empty($obj->youtube)) {
4853 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4855 if (!empty($obj->whatsapp)) {
4856 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4858 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4859 $obj->socialnetworks =
'[]';
4861 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4862 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"adherent SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
4863 $sqlupd .=
', skype=null';
4864 $sqlupd .=
', twitter=null';
4865 $sqlupd .=
', facebook=null';
4866 $sqlupd .=
', linkedin=null';
4867 $sqlupd .=
', instagram=null';
4868 $sqlupd .=
', snapchat=null';
4869 $sqlupd .=
', googleplus=null';
4870 $sqlupd .=
', youtube=null';
4871 $sqlupd .=
', whatsapp=null';
4872 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4874 $resqlupd = $db->query($sqlupd);
4889 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Members').
"</b><br>\n";
4905 print
'<tr><td colspan="4">';
4906 $sql =
'SELECT rowid, socialnetworks';
4907 $sql .=
', jabberid, skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'socpeople WHERE';
4908 $sql .=
" jabberid IS NOT NULL OR jabberid <> ''";
4909 $sql .=
" OR skype IS NOT NULL OR skype <> ''";
4910 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4911 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4912 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4913 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4914 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4915 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4916 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4917 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4919 $resql = $db->query($sql);
4921 while ($obj = $db->fetch_object($resql)) {
4922 $arraysocialnetworks = array();
4923 if (!empty($obj->jabberid)) {
4924 $arraysocialnetworks[
'jabber'] = $obj->jabberid;
4926 if (!empty($obj->skype)) {
4927 $arraysocialnetworks[
'skype'] = $obj->skype;
4929 if (!empty($obj->twitter)) {
4930 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4932 if (!empty($obj->facebook)) {
4933 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4935 if (!empty($obj->linkedin)) {
4936 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4938 if (!empty($obj->instagram)) {
4939 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4941 if (!empty($obj->snapchat)) {
4942 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4944 if (!empty($obj->googleplus)) {
4945 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4947 if (!empty($obj->youtube)) {
4948 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4950 if (!empty($obj->whatsapp)) {
4951 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4953 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4954 $obj->socialnetworks =
'[]';
4956 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4957 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"socpeople SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
4958 $sqlupd .=
', jabberid=null';
4959 $sqlupd .=
', skype=null';
4960 $sqlupd .=
', twitter=null';
4961 $sqlupd .=
', facebook=null';
4962 $sqlupd .=
', linkedin=null';
4963 $sqlupd .=
', instagram=null';
4964 $sqlupd .=
', snapchat=null';
4965 $sqlupd .=
', googleplus=null';
4966 $sqlupd .=
', youtube=null';
4967 $sqlupd .=
', whatsapp=null';
4968 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4970 $resqlupd = $db->query($sqlupd);
4985 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Contacts').
"</b><br>\n";
5001 print
'<tr><td colspan="4">';
5002 $sql =
'SELECT rowid, socialnetworks';
5003 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'societe WHERE ';
5004 $sql .=
" skype IS NOT NULL OR skype <> ''";
5005 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5006 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5007 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5008 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5009 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5010 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5011 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5012 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5014 $resql = $db->query($sql);
5016 while ($obj = $db->fetch_object($resql)) {
5017 $arraysocialnetworks = array();
5018 if (!empty($obj->skype)) {
5019 $arraysocialnetworks[
'skype'] = $obj->skype;
5021 if (!empty($obj->twitter)) {
5022 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5024 if (!empty($obj->facebook)) {
5025 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5027 if (!empty($obj->linkedin)) {
5028 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5030 if (!empty($obj->instagram)) {
5031 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5033 if (!empty($obj->snapchat)) {
5034 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5036 if (!empty($obj->googleplus)) {
5037 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5039 if (!empty($obj->youtube)) {
5040 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5042 if (!empty($obj->whatsapp)) {
5043 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5045 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5046 $obj->socialnetworks =
'[]';
5048 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5049 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"societe SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
5050 $sqlupd .=
', skype=null';
5051 $sqlupd .=
', twitter=null';
5052 $sqlupd .=
', facebook=null';
5053 $sqlupd .=
', linkedin=null';
5054 $sqlupd .=
', instagram=null';
5055 $sqlupd .=
', snapchat=null';
5056 $sqlupd .=
', googleplus=null';
5057 $sqlupd .=
', youtube=null';
5058 $sqlupd .=
', whatsapp=null';
5059 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5061 $resqlupd = $db->query($sqlupd);
5076 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Thirdparties').
"</b><br>\n";
5096 print
'<tr class="trforrunsql"><td colspan="4">';
5097 $sql =
'SELECT rowid, field';
5098 if ($mode ==
'export') {
5101 $sql .=
' FROM '.MAIN_DB_PREFIX.$mode.
'_model WHERE';
5102 $sql .=
" type LIKE 'propale_%' OR type LIKE 'commande_%' OR type LIKE 'facture_%'";
5104 $resql = $db->query($sql);
5106 while ($obj = $db->fetch_object($resql)) {
5107 $oldfield = $obj->field;
5108 $newfield = str_replace(array(
',f.facnumber',
'f.facnumber,',
'f.total,',
'f.tva,'), array(
',f.ref',
'f.ref,',
'f.total_ht,',
'f.total_tva,'), $oldfield);
5110 if ($mode ==
'export') {
5111 $oldfilter = $obj->filter;
5112 $newfilter = str_replace(array(
'f.facnumber=',
'f.total=',
'f.tva='), array(
'f.ref=',
'f.total_ht=',
'f.total_tva='), $oldfilter);
5118 if ($oldfield != $newfield || $oldfilter != $newfilter) {
5119 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.$mode.
"_model SET field = '".$db->escape($newfield).
"'";
5120 if ($mode ==
'export') {
5121 $sqlupd .=
", filter = '".$db->escape($newfilter).
"'";
5123 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5124 $resultstring .=
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$sqlupd.
"</td></tr>\n";
5125 $resqlupd = $db->query($sqlupd);
5141 print
'<b>'.$langs->trans(
'MigrationImportOrExportProfiles', $mode).
"</b><br>\n";
5144 if ($resultstring) {
5145 print $resultstring;
5147 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5164 print
'<tr class="trforrunsql"><td colspan="4">';
5165 print
'<b>'.$langs->trans(
'MigrationContractLineRank').
"</b><br>\n";
5167 $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";
5168 $sql .=
" ORDER BY c.rowid,cd.rowid";
5170 $resql = $db->query($sql);
5173 $current_contract = 0;
5174 while ($obj = $db->fetch_object($resql)) {
5175 if (empty($current_contract) || $current_contract == $obj->cid) {
5181 $sqlUpd =
"UPDATE ".$db->prefix().
"contratdet SET rang=".(int) $currentRank.
" WHERE rowid=".(
int) $obj->cdid;
5182 $resultstring =
'.';
5183 print $resultstring;
5184 $resqlUpd = $db->query($sqlUpd);
5190 $current_contract = $obj->cid;
5203 if (!$resultstring) {
5204 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5219 $firstInstallVersion =
getDolGlobalString(
'MAIN_VERSION_FIRST_INSTALL', DOL_VERSION);
5220 $migrationNeeded = (
versioncompare(explode(
'.', $firstInstallVersion, 3), array(20, 0, -5)) < 0 && !$lock);
5222 print
'<tr class="trforrunsql"><td colspan="4">';
5223 print
'<b>'.$langs->trans(
'InvoiceExportModelsMigration').
"</b>: \n";
5225 if (! $migrationNeeded) {
5226 print $langs->trans(
"AlreadyDone");
5228 dolibarr_set_const($db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5235 $sql1 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_0' WHERE type = 'facture_1'";
5237 $resql1 = $db->query($sql1);
5246 $modified1 = $db->affected_rows($resql1);
5248 print str_repeat(
'.', $modified1);
5252 $sql2 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_1' WHERE type = 'facture_2'";
5254 $resql2 = $db->query($sql2);
5263 $modified2 = $db->affected_rows($resql2);
5265 print str_repeat(
'.', $modified2);
5269 if (empty($modified1 + $modified2)) {
5270 print $langs->trans(
'NothingToDo');
5275 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 modules.
Class to manage order lines.
Class with list of lots and properties.
Class to manage commercial proposal lines.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
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.
dol_move_dir($srcdir, $destdir, $overwriteifexists=1, $indexdatabase=1, $renamedircontent=1)
Move a directory into another name.
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0, $level=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
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 a 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.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
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)
Repair orphan payments (lost relations due to bugs) Query to check if there are still orphans: 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 Link in llx_societe_remis...
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)
Records payment links for an invoice in a join table (link n<-->n for payments<-->invoices)
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)
Repair orphan payments (lost relations due to bugs) Query to check if there are still orphans: 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_productlot_path()
Migrate file from old path to new one for lot path.
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.