42define(
'ALLOWED_IF_UPGRADE_UNLOCK_FOUND', 1);
43include_once
'inc.php';
49if (!file_exists($conffile)) {
50 print
'Error: Dolibarr config file was not found. This may means that Dolibarr is not installed yet. Please call the page "/install/index.php" instead of "/install/upgrade.php").';
52require_once $conffile;
53require_once $dolibarr_main_document_root.
'/compta/facture/class/facture.class.php';
54require_once $dolibarr_main_document_root.
'/comm/propal/class/propal.class.php';
55require_once $dolibarr_main_document_root.
'/contrat/class/contrat.class.php';
56require_once $dolibarr_main_document_root.
'/commande/class/commande.class.php';
57require_once $dolibarr_main_document_root.
'/fourn/class/fournisseur.commande.class.php';
58require_once $dolibarr_main_document_root.
'/core/lib/price.lib.php';
59require_once $dolibarr_main_document_root.
'/core/class/menubase.class.php';
60require_once $dolibarr_main_document_root.
'/core/lib/files.lib.php';
75$err = error_reporting();
77if (!empty($conf->global->MAIN_OVERRIDE_TIME_LIMIT)) {
78 @set_time_limit((
int) $conf->global->MAIN_OVERRIDE_TIME_LIMIT);
84$setuplang =
GETPOST(
"selectlang",
'aZ09', 3) ?
GETPOST(
"selectlang",
'aZ09', 3) :
'auto';
85$langs->setDefaultLang($setuplang);
86$versionfrom =
GETPOST(
"versionfrom",
'alpha', 3) ?
GETPOST(
"versionfrom",
'alpha', 3) : (empty($argv[1]) ?
'' : $argv[1]);
87$versionto =
GETPOST(
"versionto",
'alpha', 3) ?
GETPOST(
"versionto",
'alpha', 3) : (empty($argv[2]) ?
'' : $argv[2]);
88$enablemodules =
GETPOST(
"enablemodules",
'alpha', 3) ?
GETPOST(
"enablemodules",
'alpha', 3) : (empty($argv[3]) ?
'' : $argv[3]);
90$langs->loadLangs(array(
"admin",
"install",
"bills",
"suppliers"));
92if ($dolibarr_main_db_type ==
'mysqli') {
95if ($dolibarr_main_db_type ==
'pgsql') {
98if ($dolibarr_main_db_type ==
'mssql') {
103dolibarr_install_syslog(
"--- upgrade2: entering upgrade2.php page ".$versionfrom.
" ".$versionto.
" ".$enablemodules);
104if (!is_object($conf)) {
114if ((!$versionfrom || preg_match(
'/version/', $versionfrom)) && (!$versionto || preg_match(
'/version/', $versionto))) {
115 print
'Error: Parameter versionfrom or versionto missing or having a bad format.'.
"\n";
116 print
'Upgrade must be ran from command line with parameters or called from page install/index.php (like a first install)'.
"\n";
118 $sapi_type = php_sapi_name();
119 $script_file = basename(__FILE__);
121 if (substr($sapi_type, 0, 3) ==
'cli') {
122 print
'Syntax from command line: '.$script_file.
" x.y.z a.b.c [MAIN_MODULE_NAME1_TO_ENABLE,MAIN_MODULE_NAME2_TO_ENABLE...]\n";
127pHeader(
'',
'step5',
GETPOST(
'action',
'aZ09') ?
GETPOST(
'action',
'aZ09') :
'upgrade',
'versionfrom='.$versionfrom.
'&versionto='.$versionto,
'',
'main-inside main-inside-borderbottom');
130if (!
GETPOST(
'action',
'aZ09') || preg_match(
'/upgrade/i',
GETPOST(
'action',
'aZ09'))) {
131 print
'<h3><img class="valignmiddle inline-block paddingright" src="../theme/common/octicons/build/svg/database.svg" width="20" alt="Database"> ';
132 print
'<span class="inline-block">'.$langs->trans(
'DataMigration').
'</span></h3>';
134 print
'<table border="0" width="100%">';
137 if ((!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) || !empty($dolibarr_main_db_encrypted_pass)) {
138 require_once $dolibarr_main_document_root.
'/core/lib/security.lib.php';
139 if (!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) {
140 $dolibarr_main_db_pass = preg_replace(
'/crypted:/i',
'', $dolibarr_main_db_pass);
141 $dolibarr_main_db_pass =
dol_decode($dolibarr_main_db_pass);
142 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
144 $dolibarr_main_db_pass =
dol_decode($dolibarr_main_db_encrypted_pass);
149 $conf->db->type = $dolibarr_main_db_type;
150 $conf->db->host = $dolibarr_main_db_host;
151 $conf->db->port = $dolibarr_main_db_port;
152 $conf->db->name = $dolibarr_main_db_name;
153 $conf->db->user = $dolibarr_main_db_user;
154 $conf->db->pass = $dolibarr_main_db_pass;
156 $db =
getDoliDBInstance($conf->db->type, $conf->db->host, $conf->db->user, $conf->db->pass, $conf->db->name, (
int) $conf->db->port);
158 if (!$db->connected) {
159 print
'<tr><td colspan="4">'.$langs->trans(
"ErrorFailedToConnectToDatabase", $conf->db->name).
'</td><td class="right">'.$langs->trans(
'Error').
'</td></tr>';
160 dolibarr_install_syslog(
'upgrade2: failed to connect to database :'.$conf->db->name.
' on '.$conf->db->host.
' for user '.$conf->db->user, LOG_ERR);
165 if ($db->database_selected) {
172 if (empty($dolibarr_main_db_encryption)) {
173 $dolibarr_main_db_encryption = 0;
175 $conf->db->dolibarr_main_db_encryption = $dolibarr_main_db_encryption;
176 if (empty($dolibarr_main_db_cryptkey)) {
177 $dolibarr_main_db_cryptkey =
'';
179 $conf->db->dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey;
182 $conf->setValues($db);
185 $listofentities = array(1);
188 include_once DOL_DOCUMENT_ROOT.
'/core/class/hookmanager.class.php';
190 $hookmanager->initHooks(array(
'upgrade2'));
192 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto);
193 $object =
new stdClass();
195 $reshook = $hookmanager->executeHooks(
'doUpgradeBefore', $parameters, $object, $action);
196 if ($reshook >= 0 && is_array($hookmanager->resArray)) {
198 $listofentities = array_unique(array_merge($listofentities, $hookmanager->resArray));
209 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN birth date';
211 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemployment date';
213 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemploymentend date';
215 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_range integer';
217 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_c_exp_tax_cat integer';
219 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN langs varchar(24)';
221 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fieldcomputed text';
223 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fielddefault varchar(255)';
225 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
"extrafields ADD COLUMN enabled varchar(255) DEFAULT '1'";
227 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN help text';
229 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user_rights ADD COLUMN entity integer DEFAULT 1 NOT NULL';
235 foreach ($listofentities as $entity) {
236 dol_syslog(
"Process upgrade2 for entity ".$entity);
239 $conf->setEntityValues($db, $entity);
242 if (defined(
'SYSLOG_FILE')) {
243 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
245 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
248 if (count($listofentities) > 1) {
249 print
'<tr><td colspan="4">*** '.$langs->trans(
"Entity").
' '.$entity.
'</td></tr>'.
"\n";
254 $dolibarrlastupgradeversionarray = preg_split(
'/[\.-]/', isset($conf->global->MAIN_VERSION_LAST_UPGRADE) ? $conf->global->MAIN_VERSION_LAST_UPGRADE : (isset($conf->global->MAIN_VERSION_LAST_INSTALL) ? $conf->global->MAIN_VERSION_LAST_INSTALL :
''));
260 $versiontoarray = explode(
'.', $versionto);
261 $versionranarray = explode(
'.', DOL_VERSION);
263 $afterversionarray = explode(
'.',
'2.0.0');
264 $beforeversionarray = explode(
'.',
'2.7.9');
266 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
327 $afterversionarray = explode(
'.',
'2.7.9');
328 $beforeversionarray = explode(
'.',
'2.8.9');
331 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
355 $afterversionarray = explode(
'.',
'2.8.9');
356 $beforeversionarray = explode(
'.',
'2.9.9');
358 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
370 $afterversionarray = explode(
'.',
'2.9.9');
371 $beforeversionarray = explode(
'.',
'3.0.9');
377 $afterversionarray = explode(
'.',
'3.0.9');
378 $beforeversionarray = explode(
'.',
'3.1.9');
380 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
388 $afterversionarray = explode(
'.',
'3.1.9');
389 $beforeversionarray = explode(
'.',
'3.2.9');
391 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
401 $afterversionarray = explode(
'.',
'3.2.9');
402 $beforeversionarray = explode(
'.',
'3.3.9');
404 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
413 $afterversionarray = explode(
'.',
'3.6.9');
414 $beforeversionarray = explode(
'.',
'3.7.9');
416 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
422 $afterversionarray = explode(
'.',
'3.7.9');
423 $beforeversionarray = explode(
'.',
'3.8.9');
429 $afterversionarray = explode(
'.',
'3.9.9');
430 $beforeversionarray = explode(
'.',
'4.0.9');
432 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
438 $afterversionarray = explode(
'.',
'4.0.9');
439 $beforeversionarray = explode(
'.',
'5.0.9');
441 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
451 $afterversionarray = explode(
'.',
'5.0.9');
452 $beforeversionarray = explode(
'.',
'6.0.9');
454 if (isModEnabled(
'multicompany')) {
455 global $multicompany_transverse_mode;
458 if (empty($multicompany_transverse_mode)) {
459 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
471 $afterversionarray = explode(
'.',
'6.0.9');
472 $beforeversionarray = explode(
'.',
'7.0.9');
474 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
483 $afterversionarray = explode(
'.',
'7.0.9');
484 $beforeversionarray = explode(
'.',
'8.0.9');
486 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
492 $afterversionarray = explode(
'.',
'8.0.9');
493 $beforeversionarray = explode(
'.',
'9.0.9');
499 $afterversionarray = explode(
'.',
'10.0.9');
500 $beforeversionarray = explode(
'.',
'11.0.9');
502 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
511 $afterversionarray = explode(
'.',
'13.0.9');
512 $beforeversionarray = explode(
'.',
'14.0.9');
514 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
521 $afterversionarray = explode(
'.',
'15.0.9');
522 $beforeversionarray = explode(
'.',
'16.0.9');
524 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
531 $afterversionarray = explode(
'.',
'16.0.9');
532 $beforeversionarray = explode(
'.',
'17.0.9');
534 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
540 $afterversionarray = explode(
'.',
'17.0.9');
541 $beforeversionarray = explode(
'.',
'18.0.9');
543 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
551 dol_syslog(
"Run migrate_... if migration is LAST ONE");
554 $listofmodule = array(
555 'MAIN_MODULE_ACCOUNTING'=>
'newboxdefonly',
556 'MAIN_MODULE_AGENDA'=>
'newboxdefonly',
557 'MAIN_MODULE_BOM'=>
'menuonly',
558 'MAIN_MODULE_BANQUE'=>
'menuonly',
559 'MAIN_MODULE_BARCODE'=>
'newboxdefonly',
560 'MAIN_MODULE_CRON'=>
'newboxdefonly',
561 'MAIN_MODULE_COMMANDE'=>
'newboxdefonly',
562 'MAIN_MODULE_BLOCKEDLOG'=>
'noboxes',
563 'MAIN_MODULE_DEPLACEMENT'=>
'newboxdefonly',
564 'MAIN_MODULE_DON'=>
'newboxdefonly',
565 'MAIN_MODULE_ECM'=>
'newboxdefonly',
566 'MAIN_MODULE_EXTERNALSITE'=>
'newboxdefonly',
567 'MAIN_MODULE_EXPENSEREPORT'=>
'newboxdefonly',
568 'MAIN_MODULE_FACTURE'=>
'newboxdefonly',
569 'MAIN_MODULE_FOURNISSEUR'=>
'newboxdefonly',
570 'MAIN_MODULE_HOLIDAY'=>
'newboxdefonly',
571 'MAIN_MODULE_MARGIN'=>
'menuonly',
572 'MAIN_MODULE_MRP'=>
'menuonly',
573 'MAIN_MODULE_OPENSURVEY'=>
'newboxdefonly',
574 'MAIN_MODULE_PAYBOX'=>
'newboxdefonly',
575 'MAIN_MODULE_PRINTING'=>
'newboxdefonly',
576 'MAIN_MODULE_PRODUIT'=>
'newboxdefonly',
577 'MAIN_MODULE_RECRUITMENT'=>
'menuonly',
578 'MAIN_MODULE_RESOURCE'=>
'noboxes',
579 'MAIN_MODULE_SALARIES'=>
'newboxdefonly',
580 'MAIN_MODULE_SERVICE'=>
'newboxdefonly',
581 'MAIN_MODULE_SYSLOG'=>
'newboxdefonly',
582 'MAIN_MODULE_SOCIETE'=>
'newboxdefonly',
583 'MAIN_MODULE_STRIPE'=>
'menuonly',
584 'MAIN_MODULE_TICKET'=>
'newboxdefonly',
585 'MAIN_MODULE_TAKEPOS'=>
'newboxdefonly',
586 'MAIN_MODULE_USER'=>
'newboxdefonly',
587 'MAIN_MODULE_VARIANTS'=>
'newboxdefonly',
588 'MAIN_MODULE_WEBSITE'=>
'newboxdefonly',
605 if (!$error && $enablemodules) {
607 $listofmodules = array();
608 $enablemodules = preg_replace(
'/enablemodules=/',
'', $enablemodules);
609 $tmplistofmodules = explode(
',', $enablemodules);
610 foreach ($tmplistofmodules as $value) {
611 $listofmodules[$value] =
'forceactivate';
615 if ($resultreloadmodules < 0) {
623 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf'=>$conf);
624 $object =
new stdClass();
626 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterDB', $parameters, $object, $action);
627 if ($hookmanager->resNbOfHooks > 0) {
629 print
'<tr><td colspan="4">';
630 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
631 print $hookmanager->error;
632 print
"<!-- (".$reshook.
") -->";
635 print
'<tr class="trforrunsql"><td colspan="4">';
636 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (DB)</b>: <span class="ok">OK</span>';
637 print
"<!-- (".$reshook.
") -->";
642 if (!empty($conf->modules_parts[
'hooks'])) {
643 print
'<tr class="trforrunsql"><td colspan="4">';
644 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterDB");
655 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"const SET VALUE = 'torefresh' WHERE name = 'MAIN_FIRST_PING_OK_ID'";
670 foreach ($listofentities as $entity) {
672 $conf->setEntityValues($db, $entity);
674 if (defined(
'SYSLOG_FILE')) {
675 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
677 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
681 $srcroot = DOL_DOCUMENT_ROOT.
'/install/medias';
682 $destroot = DOL_DATA_ROOT.
'/medias';
695 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf'=>$conf);
696 $object =
new stdClass();
698 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterFiles', $parameters, $object, $action);
699 if ($hookmanager->resNbOfHooks > 0) {
701 print
'<tr><td colspan="4">';
702 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
703 print $hookmanager->error;
704 print
"<!-- (".$reshook.
") -->";
707 print
'<tr class="trforrunsql"><td colspan="4">';
708 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (Files)</b>: <span class="ok">OK</span>';
709 print
"<!-- (".$reshook.
") -->";
714 if (!empty($conf->modules_parts[
'hooks'])) {
715 print
'<tr class="trforrunsql"><td colspan="4">';
716 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterFiles");
726 print
'<table width="100%">';
727 print
'<tr><td style="width: 30%">'.$langs->trans(
"MigrationFinished").
'</td>';
728 print
'<td class="right">';
732 print
'<span class="error">'.$langs->trans(
"Error").
'</span> - ';
736 print
'<script type="text/javascript">
737 jQuery(document).ready(function() {
738 function init_trrunsql()
740 console.log("toggle .trforrunsql");
741 jQuery(".trforrunsql").toggle();
744 jQuery(".trforrunsqlshowhide").click(function() {
749 print
'<a class="trforrunsqlshowhide" href="#">'.$langs->trans(
"ShowHideDetails").
'</a>';
752 print
'</td></tr>'.
"\n";
758 print
'<div class="error">'.$langs->trans(
'ErrorWrongParameters').
'</div>';
763if ($error && isset($argv[1])) {
769pFooter($error ? 2 : 0, $setuplang);
792 print
'<tr><td colspan="4">';
795 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
797 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
798 $obj = $db->fetch_object($result);
800 $sql =
"SELECT p.rowid, p.fk_facture, p.amount";
801 $sql .=
" FROM ".MAIN_DB_PREFIX.
"paiement as p";
802 $sql .=
" WHERE p.fk_facture > 0";
804 $resql = $db->query($sql);
810 $num = $db->num_rows($resql);
813 $obj = $db->fetch_object($resql);
814 $row[$i][0] = $obj->rowid;
815 $row[$i][1] = $obj->fk_facture;
816 $row[$i][2] = $obj->amount;
824 print $langs->trans(
'MigrationPaymentsNumberToUpdate', $num).
"<br>\n";
828 for ($i = 0; $i < $num; $i++) {
829 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
830 $sql .=
" VALUES (".((int) $row[$i][1]).
",".((int) $row[$i][0]).
",".((float) $row[$i][2]).
")";
832 $res += $db->query($sql);
834 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET fk_facture = 0 WHERE rowid = ".((int) $row[$i][0]);
836 $res += $db->query($sql);
838 print $langs->trans(
'MigrationProcessPaymentUpdate', $row[$i][0]).
"<br>\n";
842 if ($res == (2 * count($row))) {
844 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
847 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
850 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
853 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
871 print
'<tr><td colspan="4">';
874 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
876 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
877 $obj = $db->fetch_object($result);
880 $sql =
"SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
881 $sql .=
" bu2.url_id as socid";
882 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
883 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
884 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')";
885 $sql .=
" WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid";
886 $sql .=
" AND b.rappro = 1";
887 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
889 $resql = $db->query($sql);
895 $num = $db->num_rows($resql);
898 $obj = $db->fetch_object($resql);
899 if ($obj->pamount == $obj->bamount && $obj->socid) {
900 $row[$j][
'paymentid'] = $obj->rowid;
901 $row[$j][
'pamount'] = $obj->pamount;
902 $row[$j][
'fk_bank'] = $obj->fk_bank;
903 $row[$j][
'bamount'] = $obj->bamount;
904 $row[$j][
'socid'] = $obj->socid;
905 $row[$j][
'datec'] = $obj->datec;
915 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 1).
': '.count($row).
"<br>\n";
920 for ($i = 0; $i < $num; $i++) {
921 if ($conf->global->MAIN_FEATURES_LEVEL == 2) {
922 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>';
926 $sql =
" SELECT distinct f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
927 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
928 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
929 $sql .=
" AND pf.fk_facture IS NULL";
930 $sql .=
" ORDER BY f.fk_statut";
932 $resql = $db->query($sql);
934 $num = $db->num_rows($resql);
937 $obj = $db->fetch_object($resql);
938 $facid = $obj->rowid;
940 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
941 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
943 $res += $db->query($sql);
945 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
953 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
955 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
960 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
963 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
981 print
'<tr><td colspan="4">';
984 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
986 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
987 $obj = $db->fetch_object($result);
990 $sql =
"SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
991 $sql .=
" bu2.url_id as socid";
992 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
993 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
994 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')";
995 $sql .=
" WHERE pf.rowid IS NULL AND (p.fk_bank = bu.fk_bank AND bu.type = 'payment') AND bu.fk_bank = b.rowid";
996 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
998 $resql = $db->query($sql);
1004 $num = $db->num_rows($resql);
1007 $obj = $db->fetch_object($resql);
1008 if ($obj->pamount == $obj->bamount && $obj->socid) {
1009 $row[$j][
'paymentid'] = $obj->rowid;
1010 $row[$j][
'pamount'] = $obj->pamount;
1011 $row[$j][
'fk_bank'] = $obj->fk_bank;
1012 $row[$j][
'bamount'] = $obj->bamount;
1013 $row[$j][
'socid'] = $obj->socid;
1014 $row[$j][
'datec'] = $obj->datec;
1027 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 2).
': '.count($row).
"<br>\n";
1031 for ($i = 0; $i < $num; $i++) {
1032 if ($conf->global->MAIN_FEATURES_LEVEL == 2) {
1033 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>';
1037 $sql =
" SELECT distinct f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1038 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1039 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1040 $sql .=
" AND pf.fk_facture IS NULL";
1041 $sql .=
" ORDER BY f.fk_statut";
1043 $resql = $db->query($sql);
1045 $num = $db->num_rows($resql);
1048 $obj = $db->fetch_object($resql);
1049 $facid = $obj->rowid;
1051 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1052 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1054 $res += $db->query($sql);
1056 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1065 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1067 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1072 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1078 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiement DROP COLUMN fk_facture";
1088 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1105 print
'<tr><td colspan="4">';
1110 print
'<b>'.$langs->trans(
'MigrationContractsUpdate').
"</b><br>\n";
1112 $sql =
"SELECT c.rowid as cref, c.date_contrat, c.statut, c.fk_product, c.fk_facture, c.fk_user_author,";
1113 $sql .=
" p.ref, p.label, p.description, p.price, p.tva_tx, p.duration, cd.rowid";
1114 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c";
1115 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p";
1116 $sql .=
" ON c.fk_product = p.rowid";
1117 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"contratdet as cd";
1118 $sql .=
" ON c.rowid=cd.fk_contrat";
1119 $sql .=
" WHERE cd.rowid IS NULL AND p.rowid IS NOT NULL";
1120 $resql = $db->query($sql);
1126 $num = $db->num_rows($resql);
1129 print $langs->trans(
'MigrationContractsNumberToUpdate', $num).
"<br>\n";
1133 $obj = $db->fetch_object($resql);
1135 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"contratdet (";
1136 $sql .=
"fk_contrat, fk_product, statut, label, description,";
1137 $sql .=
"date_ouverture_prevue, date_ouverture, date_fin_validite, tva_tx, qty,";
1138 $sql .=
"subprice, price_ht, fk_user_author, fk_user_ouverture)";
1139 $sql .=
" VALUES (";
1140 $sql .= ((int) $obj->cref).
", ".($obj->fk_product ? ((int) $obj->fk_product) : 0).
", ";
1142 $sql .=
"'".$db->escape($obj->label).
"', null, ";
1143 $sql .= ($obj->date_contrat ?
"'".$db->idate($db->jdate($obj->date_contrat)).
"'" :
"null").
", ";
1146 $sql .= ((float) $obj->tva_tx).
", 1, ";
1147 $sql .= ((float) $obj->price).
", ".((float) $obj->price).
", ".((int) $obj->fk_user_author).
",";
1151 if ($db->query($sql)) {
1152 print $langs->trans(
'MigrationContractsLineCreation', $obj->cref).
"<br>\n";
1164 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1167 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1170 print $langs->trans(
'MigrationContractsNothingToUpdate').
"<br>\n";
1173 print $langs->trans(
'MigrationContractsFieldDontExist').
"<br>\n";
1190 print
'<tr><td colspan="4">';
1195 print
'<b>'.$langs->trans(
'MigrationBankTransfertsUpdate').
"</b><br>\n";
1197 $sql =
"SELECT ba.rowid as barowid, bb.rowid as bbrowid";
1198 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as bb, ".MAIN_DB_PREFIX.
"bank as ba";
1199 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu ON bu.fk_bank = ba.rowid";
1200 $sql .=
" WHERE ba.amount = -bb.amount AND ba.fk_account <> bb.fk_account";
1201 $sql .=
" AND ba.datev = bb.datev AND ba.datec = bb.datec";
1202 $sql .=
" AND bu.fk_bank IS NULL";
1203 $resql = $db->query($sql);
1209 $num = $db->num_rows($resql);
1212 print $langs->trans(
'MigrationBankTransfertsToUpdate', $num).
"<br>\n";
1216 $obj = $db->fetch_object($resql);
1218 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"bank_url (";
1219 $sql .=
"fk_bank, url_id, url, label, type";
1221 $sql .=
" VALUES (";
1222 $sql .= $obj->barowid.
",".$obj->bbrowid.
", '/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'";
1228 if (!$db->query($sql)) {
1239 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1242 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1245 print $langs->trans(
'MigrationBankTransfertsNothingToUpdate').
"<br>\n";
1264 print
'<tr><td colspan="4">';
1267 print
'<b>'.$langs->trans(
'MigrationContractsEmptyDatesUpdate').
"</b><br>\n";
1269 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set date_contrat=tms where date_contrat is null";
1271 $resql = $db->query($sql);
1275 if ($db->affected_rows($resql) > 0) {
1276 print $langs->trans(
'MigrationContractsEmptyDatesUpdateSuccess').
"<br>\n";
1278 print $langs->trans(
'MigrationContractsEmptyDatesNothingToUpdate').
"<br>\n";
1281 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=tms where datec is null";
1283 $resql = $db->query($sql);
1287 if ($db->affected_rows($resql) > 0) {
1288 print $langs->trans(
'MigrationContractsEmptyCreationDatesUpdateSuccess').
"<br>\n";
1290 print $langs->trans(
'MigrationContractsEmptyCreationDatesNothingToUpdate').
"<br>\n";
1306 print
'<tr><td colspan="4">';
1311 print
'<b>'.$langs->trans(
'MigrationContractsInvalidDatesUpdate').
"</b><br>\n";
1313 $sql =
"SELECT c.rowid as cref, c.datec, c.date_contrat, MIN(cd.date_ouverture) as datemin";
1314 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c,";
1315 $sql .=
" ".MAIN_DB_PREFIX.
"contratdet as cd";
1316 $sql .=
" WHERE c.rowid=cd.fk_contrat AND cd.date_ouverture IS NOT NULL";
1317 $sql .=
" GROUP BY c.rowid, c.date_contrat";
1318 $resql = $db->query($sql);
1324 $num = $db->num_rows($resql);
1327 $nbcontratsmodifie = 0;
1331 $obj = $db->fetch_object($resql);
1332 if ($obj->date_contrat > $obj->datemin) {
1333 $datemin = $db->jdate($obj->datemin);
1335 print $langs->trans(
'MigrationContractsInvalidDateFix', $obj->cref, $obj->date_contrat, $obj->datemin).
"<br>\n";
1336 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1337 $sql .=
" SET date_contrat='".$db->idate($datemin).
"'";
1338 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1339 $resql2 = $db->query($sql);
1344 $nbcontratsmodifie++;
1351 if ($nbcontratsmodifie) {
1352 print $langs->trans(
'MigrationContractsInvalidDatesNumber', $nbcontratsmodifie).
"<br>\n";
1354 print $langs->trans(
'MigrationContractsInvalidDatesNothingToUpdate').
"<br>\n";
1374 print
'<tr><td colspan="4">';
1377 print
'<b>'.$langs->trans(
'MigrationContractsIncoherentCreationDateUpdate').
"</b><br>\n";
1379 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=date_contrat where datec is null or datec > date_contrat";
1381 $resql = $db->query($sql);
1385 if ($db->affected_rows($resql) > 0) {
1386 print $langs->trans(
'MigrationContractsIncoherentCreationDateUpdateSuccess').
"<br>\n";
1388 print $langs->trans(
'MigrationContractsIncoherentCreationDateNothingToUpdate').
"<br>\n";
1404 print
'<tr><td colspan="4">';
1407 print
'<b>'.$langs->trans(
'MigrationReopeningContracts').
"</b><br>\n";
1409 $sql =
"SELECT c.rowid as cref FROM ".MAIN_DB_PREFIX.
"contrat as c, ".MAIN_DB_PREFIX.
"contratdet as cd";
1410 $sql .=
" WHERE cd.statut = 4 AND c.statut=2 AND c.rowid=cd.fk_contrat";
1412 $resql = $db->query($sql);
1416 if ($db->affected_rows($resql) > 0) {
1419 $num = $db->num_rows($resql);
1422 $nbcontratsmodifie = 0;
1426 $obj = $db->fetch_object($resql);
1428 print $langs->trans(
'MigrationReopenThisContract', $obj->cref).
"<br>\n";
1429 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1430 $sql .=
" SET statut = 1";
1431 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1432 $resql2 = $db->query($sql);
1437 $nbcontratsmodifie++;
1444 if ($nbcontratsmodifie) {
1445 print $langs->trans(
'MigrationReopenedContractsNumber', $nbcontratsmodifie).
"<br>\n";
1447 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1451 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1469 print
'<tr><td colspan="4">';
1471 print
'<b>'.$langs->trans(
'SuppliersInvoices').
"</b><br>\n";
1474 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiementfourn",
"fk_facture_fourn");
1475 $obj = $db->fetch_object($result);
1480 $select_sql =
'SELECT rowid, fk_facture_fourn, amount';
1481 $select_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn';
1482 $select_sql .=
' WHERE fk_facture_fourn IS NOT NULL';
1485 $select_resql = $db->query($select_sql);
1486 if ($select_resql) {
1487 $select_num = $db->num_rows($select_resql);
1491 while (($i < $select_num) && (!$error)) {
1492 $select_obj = $db->fetch_object($select_resql);
1495 $check_sql =
'SELECT fk_paiementfourn, fk_facturefourn';
1496 $check_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn';
1497 $check_sql .=
' WHERE fk_paiementfourn = '.((int) $select_obj->rowid).
' AND fk_facturefourn = '.((int) $select_obj->fk_facture_fourn);
1498 $check_resql = $db->query($check_sql);
1500 $check_num = $db->num_rows($check_resql);
1501 if ($check_num == 0) {
1505 print
'<tr><td colspan="4" class="nowrap"><b>'.$langs->trans(
'SuppliersInvoices').
'</b></td></tr>';
1506 print
'<tr><td>fk_paiementfourn</td><td>fk_facturefourn</td><td>'.$langs->trans(
'Amount').
'</td><td> </td></tr>';
1509 print
'<tr class="oddeven">';
1510 print
'<td>'.$select_obj->rowid.
'</td><td>'.$select_obj->fk_facture_fourn.
'</td><td>'.$select_obj->amount.
'</td>';
1512 $insert_sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn SET ';
1513 $insert_sql .=
' fk_paiementfourn = \''.$select_obj->rowid.
'\',
';
1514 $insert_sql .= ' fk_facturefourn = \
''.$select_obj->fk_facture_fourn.
'\',
';
1515 $insert_sql .= ' amount = \
''.$select_obj->amount.
'\'';
1516 $insert_resql = $db->query($insert_sql);
1518 if ($insert_resql) {
1520 print
'<td><span class="ok">'.$langs->trans(
"OK").
'</span></td>';
1522 print
'<td><span class="error">Error on insert</span></td>';
1538 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1542 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiementfourn DROP COLUMN fk_facture_fourn";
1545 print
'<tr><td>'.$langs->trans(
"Error").
'</td></tr>';
1549 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1566 $tmpmysoc->setMysoc($conf);
1570 print
'<tr><td colspan="4">';
1573 print
'<b>'.$langs->trans(
'MigrationInvoice').
"</b><br>\n";
1576 $sql =
"SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as vatrate, fd.total_ttc, fd.info_bits,";
1577 $sql .=
" f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f";
1578 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facturedet as fd, ".MAIN_DB_PREFIX.
"facture as f";
1579 $sql .=
" WHERE fd.fk_facture = f.rowid";
1580 $sql .=
" AND (((fd.total_ttc = 0 AND fd.remise_percent != 100) or fd.total_ttc IS NULL) or f.total_ttc IS NULL)";
1584 $resql = $db->query($sql);
1586 $num = $db->num_rows($resql);
1590 $obj = $db->fetch_object($resql);
1592 $rowid = $obj->rowid;
1594 $pu = $obj->subprice;
1595 $vatrate = $obj->vatrate;
1596 $remise_percent = $obj->remise_percent;
1597 $remise_percent_global = $obj->remise_percent_global;
1598 $total_ttc_f = $obj->total_ttc_f;
1599 $info_bits = $obj->info_bits;
1603 $facligne->fetch($rowid);
1605 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $facligne->product_type, $tmpmysoc);
1606 $total_ht = $result[0];
1607 $total_tva = $result[1];
1608 $total_ttc = $result[2];
1610 $facligne->total_ht = $total_ht;
1611 $facligne->total_tva = $total_tva;
1612 $facligne->total_ttc = $total_ttc;
1614 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);
1616 $facligne->update_total();
1620 if (!$total_ttc_f) {
1622 $facture->id = $obj->facid;
1624 if ($facture->fetch($facture->id) >= 0) {
1625 if ($facture->update_price() > 0) {
1628 print
"Error id=".$facture->id;
1641 print $langs->trans(
"AlreadyDone");
1647 print
"Error #1 ".$db->error();
1669 $tmpmysoc->setMysoc($conf);
1673 print
'<tr><td colspan="4">';
1676 print
'<b>'.$langs->trans(
'MigrationProposal').
"</b><br>\n";
1679 $sql =
"SELECT pd.rowid, pd.qty, pd.subprice, pd.remise_percent, pd.tva_tx as vatrate, pd.info_bits,";
1680 $sql .=
" p.rowid as propalid, p.remise_percent as remise_percent_global";
1681 $sql .=
" FROM ".MAIN_DB_PREFIX.
"propaldet as pd, ".MAIN_DB_PREFIX.
"propal as p";
1682 $sql .=
" WHERE pd.fk_propal = p.rowid";
1683 $sql .=
" AND ((pd.total_ttc = 0 AND pd.remise_percent != 100) or pd.total_ttc IS NULL)";
1686 $resql = $db->query($sql);
1688 $num = $db->num_rows($resql);
1692 $obj = $db->fetch_object($resql);
1694 $rowid = $obj->rowid;
1696 $pu = $obj->subprice;
1697 $vatrate = $obj->vatrate;
1698 $remise_percent = $obj->remise_percent;
1699 $remise_percent_global = $obj->remise_percent_global;
1700 $info_bits = $obj->info_bits;
1704 $propalligne->fetch($rowid);
1706 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $propalligne->product_type, $tmpmysoc);
1707 $total_ht = $result[0];
1708 $total_tva = $result[1];
1709 $total_ttc = $result[2];
1711 $propalligne->total_ht = $total_ht;
1712 $propalligne->total_tva = $total_tva;
1713 $propalligne->total_ttc = $total_ttc;
1715 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);
1717 $propalligne->update_total();
1742 print $langs->trans(
"AlreadyDone");
1749 print
"Error #1 ".$db->error();
1772 $tmpmysoc->setMysoc($conf);
1773 if (empty($tmpmysoc->country_id)) {
1774 $tmpmysoc->country_id = 0;
1777 print
'<tr><td colspan="4">';
1780 print
'<b>'.$langs->trans(
'MigrationContract').
"</b><br>\n";
1783 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1784 $sql .=
" c.rowid as contratid";
1785 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd, ".MAIN_DB_PREFIX.
"contrat as c";
1786 $sql .=
" WHERE cd.fk_contrat = c.rowid";
1787 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100 AND cd.subprice > 0) or cd.total_ttc IS NULL)";
1790 $resql = $db->query($sql);
1792 $num = $db->num_rows($resql);
1796 $obj = $db->fetch_object($resql);
1798 $rowid = $obj->rowid;
1800 $pu = $obj->subprice;
1801 $vatrate = $obj->vatrate;
1802 $remise_percent = $obj->remise_percent;
1803 $info_bits = $obj->info_bits;
1808 $contratligne->fetch($rowid);
1810 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, 0,
'HT', $info_bits, $contratligne->product_type, $tmpmysoc);
1811 $total_ht = $result[0];
1812 $total_tva = $result[1];
1813 $total_ttc = $result[2];
1815 $contratligne->total_ht = $total_ht;
1816 $contratligne->total_tva = $total_tva;
1817 $contratligne->total_ttc = $total_ttc;
1819 dolibarr_install_syslog(
"upgrade2: Line ".$rowid.
": contratdetid=".$obj->rowid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" -> ".$total_ht.
", ".$total_tva.
" , ".$total_ttc);
1821 $contratligne->update_total();
1826 print $langs->trans(
"AlreadyDone");
1833 print
"Error #1 ".$db->error();
1856 $tmpmysoc->setMysoc($conf);
1858 print
'<tr><td colspan="4">';
1861 print
'<b>'.$langs->trans(
'MigrationOrder').
"</b><br>\n";
1864 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1865 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1866 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"commande as c";
1867 $sql .=
" WHERE cd.fk_commande = c.rowid";
1868 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1871 $resql = $db->query($sql);
1873 $num = $db->num_rows($resql);
1877 $obj = $db->fetch_object($resql);
1879 $rowid = $obj->rowid;
1881 $pu = $obj->subprice;
1882 $vatrate = $obj->vatrate;
1883 $remise_percent = $obj->remise_percent;
1884 $remise_percent_global = $obj->remise_percent_global;
1885 $info_bits = $obj->info_bits;
1889 $commandeligne->fetch($rowid);
1891 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $tmpmysoc);
1892 $total_ht = $result[0];
1893 $total_tva = $result[1];
1894 $total_ttc = $result[2];
1896 $commandeligne->total_ht = $total_ht;
1897 $commandeligne->total_tva = $total_tva;
1898 $commandeligne->total_ttc = $total_ttc;
1900 dolibarr_install_syslog(
"upgrade2: Line ".$rowid.
" : commandeid=".$obj->rowid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" remise_global=".$remise_percent_global.
" -> ".$total_ht.
", ".$total_tva.
", ".$total_ttc);
1902 $commandeligne->update_total();
1926 print $langs->trans(
"AlreadyDone");
1943 print
"Error #1 ".$db->error();
1966 $tmpmysoc->setMysoc($conf);
1968 print
'<tr><td colspan="4">';
1971 print
'<b>'.$langs->trans(
'MigrationSupplierOrder').
"</b><br>\n";
1974 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1975 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1976 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cd, ".MAIN_DB_PREFIX.
"commande_fournisseur as c";
1977 $sql .=
" WHERE cd.fk_commande = c.rowid";
1978 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1981 $resql = $db->query($sql);
1983 $num = $db->num_rows($resql);
1987 $obj = $db->fetch_object($resql);
1989 $rowid = $obj->rowid;
1991 $pu = $obj->subprice;
1992 $vatrate = $obj->vatrate;
1993 $remise_percent = $obj->remise_percent;
1994 $remise_percent_global = $obj->remise_percent_global;
1995 $info_bits = $obj->info_bits;
1999 $commandeligne->fetch($rowid);
2001 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $tmpsoc);
2002 $total_ht = $result[0];
2003 $total_tva = $result[1];
2004 $total_ttc = $result[2];
2006 $commandeligne->total_ht = $total_ht;
2007 $commandeligne->total_tva = $total_tva;
2008 $commandeligne->total_ttc = $total_ttc;
2010 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);
2012 $commandeligne->update_total();
2036 print $langs->trans(
"AlreadyDone");
2053 print
"Error #1 ".$db->error();
2078 if (isModEnabled(
'facture')) {
2079 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
2081 if (count($modellist) == 0) {
2083 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('crabe','invoice')";
2084 $resql = $db->query($sql);
2091 if (isModEnabled(
'commande')) {
2092 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
2094 if (count($modellist) == 0) {
2096 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('einstein','order')";
2097 $resql = $db->query($sql);
2104 if (isModEnabled(
"expedition")) {
2105 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
2107 if (count($modellist) == 0) {
2109 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('rouget','shipping')";
2110 $resql = $db->query($sql);
2133 print
'<tr><td colspan="4">';
2136 print
'<b>'.$langs->trans(
'MigrationShipmentOrderMatching').
"</b><br>\n";
2138 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"fk_commande");
2139 $obj = $db->fetch_object($result);
2145 $sql =
"SELECT e.rowid, e.fk_commande FROM ".MAIN_DB_PREFIX.
"expedition as e";
2146 $resql = $db->query($sql);
2149 $num = $db->num_rows($resql);
2153 $obj = $db->fetch_object($resql);
2155 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_exp (fk_expedition,fk_commande)";
2156 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2157 $resql2 = $db->query($sql);
2170 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition DROP COLUMN fk_commande";
2171 print $langs->trans(
'FieldRenamed').
"<br>\n";
2181 print $langs->trans(
'AlreadyDone').
"<br>\n";
2198 print
'<tr><td colspan="4">';
2201 print
'<b>'.$langs->trans(
'MigrationDeliveryOrderMatching').
"</b><br>\n";
2203 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_commande");
2204 $obj = $db->fetch_object($result);
2210 $sql =
"SELECT l.rowid, l.fk_commande,";
2211 $sql .=
" c.ref_client, c.date_livraison as delivery_date";
2212 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l, ".MAIN_DB_PREFIX.
"commande as c";
2213 $sql .=
" WHERE c.rowid = l.fk_commande";
2214 $resql = $db->query($sql);
2217 $num = $db->num_rows($resql);
2221 $obj = $db->fetch_object($resql);
2223 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_liv (fk_livraison,fk_commande)";
2224 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2225 $resql2 = $db->query($sql);
2228 $delivery_date = $db->jdate($obj->delivery_date);
2230 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2231 $sqlu .=
" ref_client = '".$db->escape($obj->ref_client).
"'";
2232 $sqlu .=
", date_livraison = '".$db->idate($delivery_date).
"'";
2233 $sqlu .=
" WHERE rowid = ".((int) $obj->rowid);
2234 $resql3 = $db->query($sqlu);
2250 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_commande";
2251 print $langs->trans(
'FieldRenamed').
"<br>\n";
2261 print $langs->trans(
'AlreadyDone').
"<br>\n";
2278 print
'<tr><td colspan="4">';
2281 print
'<b>'.$langs->trans(
'MigrationDeliveryDetail').
"</b><br>\n";
2285 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_commande_ligne");
2286 $obj = $db->fetch_object($result);
2292 $sql =
"SELECT cd.rowid, cd.fk_product, cd.description, cd.subprice, cd.total_ht";
2293 $sql .=
", ld.fk_livraison";
2294 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"livraisondet as ld";
2295 $sql .=
" WHERE ld.fk_commande_ligne = cd.rowid";
2296 $resql = $db->query($sql);
2299 $num = $db->num_rows($resql);
2303 $obj = $db->fetch_object($resql);
2305 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"livraisondet SET";
2306 $sql .=
" fk_product = ".((int) $obj->fk_product);
2307 $sql .=
",description = '".$db->escape($obj->description).
"'";
2308 $sql .=
",subprice = ".price2num($obj->subprice);
2309 $sql .=
",total_ht = ".price2num($obj->total_ht);
2310 $sql .=
" WHERE fk_commande_ligne = ".((int) $obj->rowid);
2311 $resql2 = $db->query($sql);
2314 $sql =
"SELECT total_ht";
2315 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
2316 $sql .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2317 $resql3 = $db->query($sql);
2320 $obju = $db->fetch_object($resql3);
2321 $total_ht = $obju->total_ht + $obj->total_ht;
2323 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2324 $sqlu .=
" total_ht = ".price2num($total_ht,
'MT');
2325 $sqlu .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2326 $resql4 = $db->query($sqlu);
2346 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet CHANGE fk_commande_ligne fk_origin_line integer";
2347 print $langs->trans(
'FieldRenamed').
"<br>\n";
2357 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_origin_line");
2358 $obj = $db->fetch_object($result);
2360 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet ADD COLUMN fk_origin_line integer after fk_livraison";
2363 print $langs->trans(
'AlreadyDone').
"<br>\n";
2380 print
'<tr><td colspan="4">';
2383 print
'<b>'.$langs->trans(
'MigrationStockDetail').
"</b><br>\n";
2389 $sql =
"SELECT SUM(reel) as total, fk_product";
2390 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_stock as ps";
2391 $sql .=
" GROUP BY fk_product";
2392 $resql = $db->query($sql);
2395 $num = $db->num_rows($resql);
2399 $obj = $db->fetch_object($resql);
2401 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET";
2402 $sql .=
" stock = ".price2num($obj->total,
'MS');
2403 $sql .=
" WHERE rowid = ".((int) $obj->fk_product);
2405 $resql2 = $db->query($sql);
2442 print
'<tr><td colspan="4">';
2445 print
'<b>'.$langs->trans(
'MigrationMenusDetail').
"</b><br>\n";
2449 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"menu_constraint")) {
2452 $sql =
"SELECT m.rowid, mc.action";
2453 $sql .=
" FROM ".MAIN_DB_PREFIX.
"menu_constraint as mc, ".MAIN_DB_PREFIX.
"menu_const as md, ".MAIN_DB_PREFIX.
"menu as m";
2454 $sql .=
" WHERE md.fk_menu = m.rowid AND md.fk_constraint = mc.rowid";
2455 $sql .=
" AND m.enabled = '1'";
2456 $resql = $db->query($sql);
2459 $num = $db->num_rows($resql);
2462 $obj = $db->fetch_object($resql);
2464 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"menu SET";
2465 $sql .=
" enabled = '".$db->escape($obj->action).
"'";
2466 $sql .=
" WHERE rowid = ".((int) $obj->rowid);
2467 $sql .=
" AND enabled = '1'";
2469 $resql2 = $db->query($sql);
2490 print $langs->trans(
'AlreadyDone').
"<br>\n";
2509 print
'<tr><td colspan="4">';
2512 print
'<b>'.$langs->trans(
'MigrationDeliveryAddress').
"</b><br>\n";
2516 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"co_exp")) {
2519 $sql =
"SELECT c.fk_adresse_livraison, ce.fk_expedition";
2520 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande as c";
2521 $sql .=
", ".MAIN_DB_PREFIX.
"co_exp as ce";
2522 $sql .=
" WHERE c.rowid = ce.fk_commande";
2523 $sql .=
" AND c.fk_adresse_livraison IS NOT NULL AND c.fk_adresse_livraison != 0";
2525 $resql = $db->query($sql);
2528 $num = $db->num_rows($resql);
2532 $obj = $db->fetch_object($resql);
2534 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
2535 $sql .=
" fk_adresse_livraison = '".$db->escape($obj->fk_adresse_livraison).
"'";
2536 $sql .=
" WHERE rowid = ".((int) $obj->fk_expedition);
2538 $resql2 = $db->query($sql);
2547 print $langs->trans(
'AlreadyDone').
"<br>\n";
2560 print $langs->trans(
'AlreadyDone').
"<br>\n";
2579 if (($db->type ==
'mysql' || $db->type ==
'mysqli')) {
2581 dolibarr_install_syslog(
"upgrade2::migrate_restore_missing_links Version of database too old to make this migrate action");
2585 print
'<tr><td colspan="4">';
2588 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (1)<br>\n";
2594 $table1 =
'facturedet'; $field1 =
'fk_remise_except';
2595 $table2 =
'societe_remise_except'; $field2 =
'fk_facture_line';
2599 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2600 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2601 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2602 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2603 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2606 $resql = $db->query($sql);
2609 $num = $db->num_rows($resql);
2613 $obj = $db->fetch_object($resql);
2615 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2616 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table2.
" SET";
2617 $sql .=
" ".$field2.
" = '".$db->escape($obj->rowid).
"'";
2618 $sql .=
" WHERE rowid = ".((int) $obj->field);
2620 $resql2 = $db->query($sql);
2629 print $langs->trans(
'AlreadyDone').
"<br>\n";
2645 print
'<tr><td colspan="4">';
2648 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (2)<br>\n";
2651 $table2 =
'facturedet'; $field2 =
'fk_remise_except';
2652 $table1 =
'societe_remise_except'; $field1 =
'fk_facture_line';
2656 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2657 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2658 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2659 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2660 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2663 $resql = $db->query($sql);
2666 $num = $db->num_rows($resql);
2670 $obj = $db->fetch_object($resql);
2672 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2673 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table2.
" SET";
2674 $sql .=
" ".$field2.
" = '".$db->escape($obj->rowid).
"'";
2675 $sql .=
" WHERE rowid = ".((int) $obj->field);
2677 $resql2 = $db->query($sql);
2686 print $langs->trans(
'AlreadyDone').
"<br>\n";
2701 return ($error ? -1 : 1);
2716 print
'<tr><td colspan="4">';
2719 print
'<b>'.$langs->trans(
'MigrationProjectUserResp').
"</b><br>\n";
2721 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"projet",
"fk_user_resp");
2722 $obj = $db->fetch_object($result);
2728 $sql =
"SELECT rowid, fk_user_resp FROM ".MAIN_DB_PREFIX.
"projet";
2729 $resql = $db->query($sql);
2732 $num = $db->num_rows($resql);
2736 $obj = $db->fetch_object($resql);
2738 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2739 $sql2 .=
"datecreate";
2740 $sql2 .=
", statut";
2741 $sql2 .=
", element_id";
2742 $sql2 .=
", fk_c_type_contact";
2743 $sql2 .=
", fk_socpeople";
2744 $sql2 .=
") VALUES (";
2745 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2747 $sql2 .=
", ".$obj->rowid;
2749 $sql2 .=
", ".$obj->fk_user_resp;
2752 if ($obj->fk_user_resp > 0) {
2753 $resql2 = $db->query($sql2);
2766 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"projet DROP COLUMN fk_user_resp";
2767 if ($db->query($sqlDrop)) {
2780 print $langs->trans(
'AlreadyDone').
"<br>\n";
2797 print
'<tr><td colspan="4">';
2800 print
'<b>'.$langs->trans(
'MigrationProjectTaskActors').
"</b><br>\n";
2802 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"projet_task_actors")) {
2807 $sql =
"SELECT fk_projet_task as fk_project_task, fk_user FROM ".MAIN_DB_PREFIX.
"projet_task_actors";
2808 $resql = $db->query($sql);
2811 $num = $db->num_rows($resql);
2815 $obj = $db->fetch_object($resql);
2817 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2818 $sql2 .=
"datecreate";
2819 $sql2 .=
", statut";
2820 $sql2 .=
", element_id";
2821 $sql2 .=
", fk_c_type_contact";
2822 $sql2 .=
", fk_socpeople";
2823 $sql2 .=
") VALUES (";
2824 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2826 $sql2 .=
", ".$obj->fk_project_task;
2828 $sql2 .=
", ".$obj->fk_user;
2831 $resql2 = $db->query($sql2);
2843 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.
"projet_task_actors";
2844 if ($db->query($sqlDrop)) {
2857 print $langs->trans(
'AlreadyDone').
"<br>\n";
2877 print
'<tr><td colspan="4">';
2880 print
'<b>'.$langs->trans(
'MigrationRelationshipTables', MAIN_DB_PREFIX.$table).
"</b><br>\n";
2884 if ($db->DDLInfoTable(MAIN_DB_PREFIX.$table)) {
2889 $sqlSelect =
"SELECT ".$fk_source.
", ".$fk_target;
2890 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.$table;
2892 $resql = $db->query($sqlSelect);
2895 $num = $db->num_rows($resql);
2899 $obj = $db->fetch_object($resql);
2901 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
2902 $sqlInsert .=
"fk_source";
2903 $sqlInsert .=
", sourcetype";
2904 $sqlInsert .=
", fk_target";
2905 $sqlInsert .=
", targettype";
2906 $sqlInsert .=
") VALUES (";
2907 $sqlInsert .= $obj->$fk_source;
2908 $sqlInsert .=
", '".$db->escape($sourcetype).
"'";
2909 $sqlInsert .=
", ".$obj->$fk_target;
2910 $sqlInsert .=
", '".$db->escape($targettype).
"'";
2913 $result = $db->query($sqlInsert);
2922 print $langs->trans(
'AlreadyDone').
"<br>\n";
2926 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.$table;
2927 if ($db->query($sqlDrop)) {
2940 print $langs->trans(
'AlreadyDone').
"<br>\n";
2958 print
'<tr><td colspan="4">';
2961 print
'<b>'.$langs->trans(
'MigrationProjectTaskTime').
"</b><br>\n";
2967 $sql =
"SELECT rowid, fk_element, element_duration";
2968 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_time";
2969 $resql = $db->query($sql);
2972 $num = $db->num_rows($resql);
2975 $totaltime = array();
2979 $obj = $db->fetch_object($resql);
2981 if ($obj->element_duration > 0) {
2984 list($hour, $min) = explode(
'.', $obj->element_duration);
2985 $hour = $hour * 60 * 60;
2986 $min = ($min / 100) * 60 * 60;
2987 $newtime = $hour + $min;
2989 $sql2 =
"UPDATE ".MAIN_DB_PREFIX.
"element_time SET";
2990 $sql2 .=
" element_duration = ".((int) $newtime);
2991 $sql2 .=
" WHERE rowid = ".((int) $obj->rowid);
2993 $resql2 = $db->query($sql2);
3000 if (!empty($totaltime[$obj->fk_element])) {
3001 $totaltime[$obj->fk_element] += $newtime;
3003 $totaltime[$obj->fk_element] = $newtime;
3006 if (!empty($totaltime[$obj->fk_element])) {
3007 $totaltime[$obj->fk_element] += $obj->element_duration;
3009 $totaltime[$obj->fk_element] = $obj->element_duration;
3018 foreach ($totaltime as $taskid => $total_duration) {
3019 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"projet_task SET";
3020 $sql .=
" duration_effective = ".((int) $total_duration);
3021 $sql .=
" WHERE rowid = ".((int) $taskid);
3023 $resql = $db->query($sql);
3030 print $langs->trans(
'AlreadyDone').
"<br>\n";
3036 print $langs->trans(
'AlreadyDone').
"<br>\n";
3061 print
'<tr><td colspan="4">';
3064 print
'<b>'.$langs->trans(
'MigrationCustomerOrderShipping').
"</b><br>\n";
3068 $result1 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"ref_customer");
3069 $result2 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"date_delivery");
3070 $obj1 = $db->fetch_object($result1);
3071 $obj2 = $db->fetch_object($result2);
3072 if (!$obj1 && !$obj2) {
3077 $sqlAdd1 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN ref_customer varchar(30) AFTER entity";
3078 $sqlAdd2 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition";
3080 if ($db->query($sqlAdd1) && $db->query($sqlAdd2)) {
3081 $sqlSelect =
"SELECT e.rowid as shipping_id, c.ref_client, c.date_livraison as delivery_date";
3082 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"expedition as e";
3083 $sqlSelect .=
", ".MAIN_DB_PREFIX.
"element_element as el";
3084 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"commande as c ON c.rowid = el.fk_source AND el.sourcetype = 'commande'";
3085 $sqlSelect .=
" WHERE e.rowid = el.fk_target";
3086 $sqlSelect .=
" AND el.targettype = 'shipping'";
3088 $resql = $db->query($sqlSelect);
3091 $num = $db->num_rows($resql);
3095 $obj = $db->fetch_object($resql);
3097 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
3098 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_client).
"'";
3099 $sqlUpdate .=
", date_delivery = '".$db->escape($obj->delivery_date ? $obj->delivery_date :
'null').
"'";
3100 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->shipping_id);
3102 $result = $db->query($sqlUpdate);
3111 print $langs->trans(
'AlreadyDone').
"<br>\n";
3129 print $langs->trans(
'AlreadyDone').
"<br>\n";
3145 print
'<tr><td colspan="4">';
3148 print
'<b>'.$langs->trans(
'MigrationShippingDelivery').
"</b><br>\n";
3152 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_expedition");
3153 $obj = $db->fetch_object($result);
3159 $sqlSelect =
"SELECT rowid, fk_expedition";
3160 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
3161 $sqlSelect .=
" WHERE fk_expedition is not null";
3163 $resql = $db->query($sqlSelect);
3166 $num = $db->num_rows($resql);
3170 $obj = $db->fetch_object($resql);
3172 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
3173 $sqlInsert .=
"fk_source";
3174 $sqlInsert .=
", sourcetype";
3175 $sqlInsert .=
", fk_target";
3176 $sqlInsert .=
", targettype";
3177 $sqlInsert .=
") VALUES (";
3178 $sqlInsert .= $obj->fk_expedition;
3179 $sqlInsert .=
", 'shipping'";
3180 $sqlInsert .=
", ".$obj->rowid;
3181 $sqlInsert .=
", 'delivery'";
3184 $result = $db->query($sqlInsert);
3186 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET fk_expedition = NULL";
3187 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3189 $result = $db->query($sqlUpdate);
3202 print $langs->trans(
'AlreadyDone').
"<br>\n";
3206 $sqlDelete =
"DELETE FROM ".MAIN_DB_PREFIX.
"element_element WHERE sourcetype = 'commande' AND targettype = 'delivery'";
3207 $db->query($sqlDelete);
3212 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_expedition";
3213 $db->query($sqlDrop);
3223 print $langs->trans(
'AlreadyDone').
"<br>\n";
3240 print
'<tr><td colspan="4">';
3243 print
'<b>'.$langs->trans(
'MigrationShippingDelivery2').
"</b><br>\n";
3251 $sqlSelect =
"SELECT l.rowid as delivery_id, e.ref_customer, e.date_delivery";
3252 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l,";
3253 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"element_element as el,";
3254 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"expedition as e";
3255 $sqlSelect .=
" WHERE l.rowid = el.fk_target";
3256 $sqlSelect .=
" AND el.targettype = 'delivery'";
3257 $sqlSelect .=
" AND e.rowid = el.fk_source AND el.sourcetype = 'shipping'";
3258 $sqlSelect .=
" AND (e.ref_customer IS NOT NULL OR e.date_delivery IS NOT NULL)";
3260 $sqlSelect .=
" AND (l.ref_customer IS NULL".($db->type !=
'pgsql' ?
" or l.ref_customer = ''" :
"").
")";
3261 $sqlSelect .=
" AND (l.date_delivery IS NULL".($db->type !=
'pgsql' ?
" or l.date_delivery = ''" :
"").
")";
3263 $resql = $db->query($sqlSelect);
3266 $num = $db->num_rows($resql);
3270 $obj = $db->fetch_object($resql);
3272 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
3273 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_customer).
"',";
3274 $sqlUpdate .=
" date_delivery = ".($obj->date_delivery ?
"'".$db->escape($obj->date_delivery).
"'" :
'null');
3275 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->delivery_id);
3277 $result = $db->query($sqlUpdate);
3286 print $langs->trans(
'AlreadyDone').
"<br>\n";
3313 print
'<tr><td colspan="4">';
3316 print
'<b>'.$langs->trans(
'MigrationActioncommElement').
"</b><br>\n";
3319 'propal' =>
'propalrowid',
3320 'order' =>
'fk_commande',
3321 'invoice' =>
'fk_facture',
3322 'contract' =>
'fk_contract',
3323 'order_supplier' =>
'fk_supplier_order',
3324 'invoice_supplier' =>
'fk_supplier_invoice'
3327 foreach ($elements as $type => $field) {
3328 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"actioncomm", $field);
3329 $obj = $db->fetch_object($result);
3335 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"actioncomm SET ";
3336 $sql .=
"fk_element = ".$field.
", elementtype = '".$db->escape($type).
"'";
3337 $sql .=
" WHERE ".$field.
" IS NOT NULL";
3338 $sql .=
" AND fk_element IS NULL";
3339 $sql .=
" AND elementtype IS NULL";
3341 $resql = $db->query($sql);
3355 print $langs->trans(
'AlreadyDone').
"<br>\n";
3372 print
'<tr><td colspan="4">';
3375 print
'<b>'.$langs->trans(
'MigrationPaymentMode').
"</b><br>\n";
3378 'old_id' => array(5, 8, 9, 10, 11),
3379 'new_id' => array(50, 51, 52, 53, 54),
3380 'code' => array(
'VAD',
'TRA',
'LCR',
'FAC',
'PRO'),
3381 'tables' => array(
'commande_fournisseur',
'commande',
'facture_rec',
'facture',
'propal')
3385 foreach ($elements[
'old_id'] as $key => $old_id) {
3390 $sqlSelect =
"SELECT id";
3391 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"c_paiement";
3392 $sqlSelect .=
" WHERE id = ".((int) $old_id);
3393 $sqlSelect .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3395 $resql = $db->query($sqlSelect);
3397 $num = $db->num_rows($resql);
3403 $sqla =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET";
3404 $sqla .=
" fk_paiement = ".((int) $elements[
'new_id'][$key]);
3405 $sqla .=
" WHERE fk_paiement = ".((int) $old_id);
3406 $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]).
"')";
3407 $resqla = $db->query($sqla);
3409 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"c_paiement SET";
3410 $sql .=
" id = ".((int) $elements[
'new_id'][$key]);
3411 $sql .=
" WHERE id = ".((int) $old_id);
3412 $sql .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3413 $resql = $db->query($sql);
3415 if ($resqla && $resql) {
3416 foreach ($elements[
'tables'] as $table) {
3417 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table.
" SET ";
3418 $sql .=
"fk_mode_reglement = ".((int) $elements[
'new_id'][$key]);
3419 $sql .=
" WHERE fk_mode_reglement = ".((int) $old_id);
3421 $resql = $db->query($sql);
3444 print $langs->trans(
'AlreadyDone').
"<br>\n";
3462 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"categorie_association");
3464 $obj = $db->fetch_object($result);
3468 $sql =
"SELECT fk_categorie_mere, fk_categorie_fille";
3469 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3471 $resql = $db->query($sql);
3473 $num = $db->num_rows($resql);
3474 while ($obj = $db->fetch_object($resql)) {
3475 if (!isset($filles[$obj->fk_categorie_fille])) {
3476 if ($obj->fk_categorie_mere != $obj->fk_categorie_fille) {
3477 $filles[$obj->fk_categorie_fille] = 1;
3478 $couples[$obj->fk_categorie_mere.
'_'.$obj->fk_categorie_fille] = array(
'mere'=>$obj->fk_categorie_mere,
'fille'=>$obj->fk_categorie_fille);
3486 if (count($couples) > 0 && $num > count($couples)) {
3492 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_association";
3494 $resqld = $db->query($sql);
3497 foreach ($couples as $key => $val) {
3498 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_association(fk_categorie_mere,fk_categorie_fille)";
3499 $sql .=
" VALUES(".((int) $val[
'mere']).
", ".((int) $val[
'fille']).
")";
3501 $resqli = $db->query($sql);
3509 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3510 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Success").
' ('.$num.
'=>'.count($couples).
')</td></tr>';
3513 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3514 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Failed").
'</td></tr>';
3519 print
'<tr><td>'.$langs->trans(
"Error").
'</td>';
3520 print
'<td class="right"><div class="error">'.$db->lasterror().
'</div></td></tr>';
3537 print
'<tr><td colspan="4">';
3540 print
'<b>'.$langs->trans(
'MigrationCategorieAssociation').
"</b><br>\n";
3544 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"categorie_association")) {
3549 $sqlSelect =
"SELECT fk_categorie_mere, fk_categorie_fille";
3550 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3552 $resql = $db->query($sqlSelect);
3555 $num = $db->num_rows($resql);
3559 $obj = $db->fetch_object($resql);
3561 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"categorie SET ";
3562 $sqlUpdate .=
"fk_parent = ".((int) $obj->fk_categorie_mere);
3563 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->fk_categorie_fille);
3565 $result = $db->query($sqlUpdate);
3574 print $langs->trans(
'AlreadyDone').
"<br>\n";
3587 print $langs->trans(
'AlreadyDone').
"<br>\n";
3603 print
'<tr><td colspan="4">';
3606 print
'<b>'.$langs->trans(
'MigrationEvents').
"</b><br>\n";
3614 $sqlSelect =
"SELECT a.id, a.fk_user_action";
3615 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3616 $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";
3617 $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')";
3618 $sqlSelect .=
" ORDER BY a.id";
3621 $resql = $db->query($sqlSelect);
3624 $num = $db->num_rows($resql);
3628 $obj = $db->fetch_object($resql);
3630 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3631 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'user', ".((int) $obj->fk_user_action).
")";
3633 $result = $db->query($sqlUpdate);
3642 print $langs->trans(
'AlreadyDone').
"<br>\n";
3669 print
'<tr><td colspan="4">';
3672 print
'<b>'.$langs->trans(
'MigrationEventsContact').
"</b><br>\n";
3680 $sqlSelect =
"SELECT a.id, a.fk_contact";
3681 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3682 $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";
3683 $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')";
3684 $sqlSelect .=
" ORDER BY a.id";
3687 $resql = $db->query($sqlSelect);
3690 $num = $db->num_rows($resql);
3694 $obj = $db->fetch_object($resql);
3696 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3697 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'socpeople', ".((int) $obj->fk_contact).
")";
3699 $result = $db->query($sqlUpdate);
3708 print $langs->trans(
'AlreadyDone').
"<br>\n";
3738 require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
3740 print
'<tr><td colspan="4">';
3743 print
'<b>'.$langs->trans(
'MigrationResetBlockedLog').
"</b><br>\n";
3751 $sqlSelect =
"SELECT DISTINCT entity";
3752 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"blockedlog";
3756 $resql = $db->query($sqlSelect);
3759 $num = $db->num_rows($resql);
3763 $obj = $db->fetch_object($resql);
3765 print
'Process entity '.$obj->entity;
3767 $sqlSearch =
"SELECT count(rowid) as nb FROM ".MAIN_DB_PREFIX.
"blockedlog WHERE action = 'MODULE_SET' and entity = ".((int) $obj->entity);
3768 $resqlSearch = $db->query($sqlSearch);
3770 $objSearch = $db->fetch_object($resqlSearch);
3772 if ($objSearch && $objSearch->nb == 0) {
3773 print
' - Record for entity must be reset...';
3775 $sqlUpdate =
"DELETE FROM ".MAIN_DB_PREFIX.
"blockedlog";
3776 $sqlUpdate .=
" WHERE entity = ".((int) $obj->entity);
3777 $resqlUpdate = $db->query($sqlUpdate);
3778 if (!$resqlUpdate) {
3783 $object =
new stdClass();
3785 $object->element =
'module';
3786 $object->ref =
'systemevent';
3787 $object->entity = $obj->entity;
3791 $b->setObjectData($object,
'MODULE_SET', 0);
3793 $res = $b->create($user);
3799 print
' - '.$langs->trans(
'AlreadyInV7').
'<br>';
3808 print $langs->trans(
'NothingToDo').
"<br>\n";
3835 print
'<tr><td colspan="4">';
3838 print
'<b>'.$langs->trans(
'MigrationRemiseEntity').
"</b><br>\n";
3846 $sqlSelect =
"SELECT sr.rowid, s.entity";
3847 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise as sr, ".MAIN_DB_PREFIX.
"societe as s";
3848 $sqlSelect .=
" WHERE sr.fk_soc = s.rowid and sr.entity != s.entity";
3852 $resql = $db->query($sqlSelect);
3855 $num = $db->num_rows($resql);
3859 $obj = $db->fetch_object($resql);
3861 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise SET";
3862 $sqlUpdate .=
" entity = ".$obj->entity;
3863 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3865 $result = $db->query($sqlUpdate);
3875 print $langs->trans(
'AlreadyDone').
"<br>\n";
3901 print
'<tr><td colspan="4">';
3904 print
'<b>'.$langs->trans(
'MigrationRemiseExceptEntity').
"</b><br>\n";
3912 $sqlSelect =
"SELECT sr.rowid, sr.fk_soc, sr.fk_facture_source, sr.fk_facture, sr.fk_facture_line";
3913 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as sr";
3916 $resql = $db->query($sqlSelect);
3919 $num = $db->num_rows($resql);
3923 $obj = $db->fetch_object($resql);
3925 if (!empty($obj->fk_facture_source) || !empty($obj->fk_facture)) {
3926 $fk_facture = (!empty($obj->fk_facture_source) ? $obj->fk_facture_source : $obj->fk_facture);
3928 $sqlSelect2 =
"SELECT f.entity";
3929 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f";
3930 $sqlSelect2 .=
" WHERE f.rowid = ".((int) $fk_facture);
3931 } elseif (!empty($obj->fk_facture_line)) {
3932 $sqlSelect2 =
"SELECT f.entity";
3933 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f, ".MAIN_DB_PREFIX.
"facturedet as fd";
3934 $sqlSelect2 .=
" WHERE fd.rowid = ".((int) $obj->fk_facture_line);
3935 $sqlSelect2 .=
" AND fd.fk_facture = f.rowid";
3937 $sqlSelect2 =
"SELECT s.entity";
3938 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
3939 $sqlSelect2 .=
" WHERE s.rowid = ".((int) $obj->fk_soc);
3942 $resql2 = $db->query($sqlSelect2);
3944 if ($db->num_rows($resql2) > 0) {
3945 $obj2 = $db->fetch_object($resql2);
3947 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise_except SET";
3948 $sqlUpdate .=
" entity = ".((int) $obj2->entity);
3949 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3951 $result = $db->query($sqlUpdate);
3966 print $langs->trans(
'AlreadyDone').
"<br>\n";
3993 print
'<tr><td colspan="4">';
3995 print
'<b>'.$langs->trans(
'MigrationUserRightsEntity').
"</b><br>\n";
4003 $sqlSelect =
"SELECT u.rowid, u.entity";
4004 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"user as u";
4005 $sqlSelect .=
" WHERE u.entity > 1";
4008 $resql = $db->query($sqlSelect);
4011 $num = $db->num_rows($resql);
4015 $obj = $db->fetch_object($resql);
4017 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"user_rights SET";
4018 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4019 $sqlUpdate .=
" WHERE fk_user = ".((int) $obj->rowid);
4021 $result = $db->query($sqlUpdate);
4031 print $langs->trans(
'AlreadyDone').
"<br>\n";
4058 print
'<tr><td colspan="4">';
4060 print
'<b>'.$langs->trans(
'MigrationUserGroupRightsEntity').
"</b><br>\n";
4068 $sqlSelect =
"SELECT u.rowid, u.entity";
4069 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"usergroup as u";
4070 $sqlSelect .=
" WHERE u.entity > 1";
4073 $resql = $db->query($sqlSelect);
4076 $num = $db->num_rows($resql);
4080 $obj = $db->fetch_object($resql);
4082 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"usergroup_rights SET";
4083 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4084 $sqlUpdate .=
" WHERE fk_usergroup = ".((int) $obj->rowid);
4086 $result = $db->query($sqlUpdate);
4096 print $langs->trans(
'AlreadyDone').
"<br>\n";
4127 if (is_dir(DOL_DATA_ROOT.$oldname) && !file_exists(DOL_DATA_ROOT.$newname)) {
4128 dolibarr_install_syslog(
"upgrade2::migrate_rename_directories move ".DOL_DATA_ROOT.$oldname.
' into '.DOL_DATA_ROOT.$newname);
4129 @rename(DOL_DATA_ROOT.$oldname, DOL_DATA_ROOT.$newname);
4149 $filetodeletearray = array(
4150 '/core/ajax/ajaxcompanies.php',
4151 '/core/triggers/interface_demo.class.php',
4152 '/core/menus/barre_left/default.php',
4153 '/core/menus/barre_top/default.php',
4154 '/core/modules/modComptabiliteExpert.class.php',
4155 '/core/modules/modCommercial.class.php',
4156 '/core/modules/modProduit.class.php',
4157 '/core/modules/modSkype.class.php',
4158 '/core/triggers/interface_modWebcalendar_Webcalsynchro.class.php',
4159 '/core/triggers/interface_modCommande_Ecotax.class.php',
4160 '/core/triggers/interface_modCommande_fraisport.class.php',
4161 '/core/triggers/interface_modPropale_PropalWorkflow.class.php',
4162 '/core/triggers/interface_99_modWebhook_WebhookTriggers.class.php',
4163 '/core/triggers/interface_99_modZapier_ZapierTriggers.class.php',
4164 '/core/menus/smartphone/iphone.lib.php',
4165 '/core/menus/smartphone/iphone_backoffice.php',
4166 '/core/menus/smartphone/iphone_frontoffice.php',
4167 '/core/menus/standard/auguria_backoffice.php',
4168 '/core/menus/standard/auguria_frontoffice.php',
4169 '/core/menus/standard/eldy_backoffice.php',
4170 '/core/menus/standard/eldy_frontoffice.php',
4171 '/core/modules/export/export_excel.modules.php',
4172 '/core/modules/export/export_csv.modules.php',
4173 '/core/modules/export/exportcsv.modules.php',
4174 '/core/modules/export/export_excel2007new.modules.php',
4175 '/core/modules/facture/pdf_crabe.modules.php',
4176 '/core/modules/facture/pdf_oursin.modules.php',
4177 '/core/modules/mailings/contacts2.modules.php',
4178 '/core/modules/mailings/contacts3.modules.php',
4179 '/core/modules/mailings/contacts4.modules.php',
4180 '/core/modules/mailings/framboise.modules.php',
4181 '/core/modules/mailings/dolibarr_services_expired.modules.php',
4182 '/core/modules/mailings/peche.modules.php',
4183 '/core/modules/mailings/poire.modules.php',
4184 '/core/modules/mailings/kiwi.modules.php',
4185 '/core/boxes/box_members.php',
4187 '/includes/restler/framework/Luracast/Restler/Data/Object.php',
4188 '/phenix/inc/triggers/interface_modPhenix_Phenixsynchro.class.php',
4189 '/webcalendar/inc/triggers/interface_modWebcalendar_webcalsynchro.class.php',
4191 '/api/class/api_generic.class.php',
4192 '/asterisk/cidlookup.php',
4193 '/categories/class/api_category.class.php',
4194 '/categories/class/api_deprecated_category.class.php',
4195 '/compta/facture/class/api_invoice.class.php',
4196 '/commande/class/api_commande.class.php',
4197 '/user/class/api_user.class.php',
4198 '/product/class/api_product.class.php',
4199 '/societe/class/api_contact.class.php',
4200 '/societe/class/api_thirdparty.class.php',
4201 '/support/online.php',
4202 '/takepos/class/actions_takepos.class.php',
4204 '/install/mysql/tables/llx_c_ticketsup_category.key.sql',
4205 '/install/mysql/tables/llx_c_ticketsup_category.sql',
4206 '/install/mysql/tables/llx_c_ticketsup_severity.key.sql',
4207 '/install/mysql/tables/llx_c_ticketsup_severity.sql',
4208 '/install/mysql/tables/llx_c_ticketsup_type.key.sql',
4209 '/install/mysql/tables/llx_c_ticketsup_type.sql'
4212 foreach ($filetodeletearray as $filetodelete) {
4214 if (file_exists(DOL_DOCUMENT_ROOT.$filetodelete)) {
4215 $result =
dol_delete_file(DOL_DOCUMENT_ROOT.$filetodelete, 0, 0, 0,
null,
true,
false);
4217 $langs->load(
"errors");
4218 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteFile", DOL_DOCUMENT_ROOT.$filetodelete);
4219 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4244 $filetodeletearray = array(
4245 DOL_DOCUMENT_ROOT.
'/core/modules/facture/terre',
4246 DOL_DOCUMENT_ROOT.
'/core/modules/facture/mercure',
4250 if (!empty($_SERVER[
"WINDIR"])) {
4251 $filetodeletearray[] = DOL_DOCUMENT_ROOT.
'/includes/phpoffice/PhpSpreadsheet';
4254 foreach ($filetodeletearray as $filetodelete) {
4256 if (file_exists($filetodelete)) {
4260 $langs->load(
"errors");
4261 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteDir", $filetodelete);
4262 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4286 if (count($listofmodule) == 0) {
4290 if (!is_object($user)) {
4291 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4292 $user =
new User($db);
4295 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules force=".$force.
", listofmodule=".join(
',', array_keys($listofmodule)));
4297 $reloadactionformodules = array(
4298 'MAIN_MODULE_AGENDA' => array(
'class' =>
'modAgenda',
'remove'=> 1),
4299 'MAIN_MODULE_API' => array(
'class' =>
'modApi'),
4300 'MAIN_MODULE_BARCODE' => array(
'class' =>
'modBarcode',
'remove'=> 1),
4301 'MAIN_MODULE_BLOCKEDLOG' => array(
'class' =>
'modBlockedLog',
'deleteinsertmenus'=> 1),
4302 'MAIN_MODULE_CRON' => array(
'class' =>
'modCron',
'remove'=> 1),
4303 'MAIN_MODULE_EXTERNALSITE' => array(
'class' =>
'modExternalSite',
'remove'=> 1),
4304 'MAIN_MODULE_SOCIETE' => array(
'class' =>
'modSociete',
'remove'=> 1),
4305 'MAIN_MODULE_PRODUIT' => array(
'class' =>
'modProduct'),
4306 'MAIN_MODULE_SERVICE' => array(
'class' =>
'modService'),
4307 'MAIN_MODULE_COMMANDE' => array(
'class' =>
'modCommande'),
4308 'MAIN_MODULE_FACTURE' => array(
'class' =>
'modFacture'),
4309 'MAIN_MODULE_FOURNISSEUR' => array(
'class' =>
'modFournisseur'),
4310 'MAIN_MODULE_HOLIDAY' => array(
'class' =>
'modHoliday',
'remove'=>1),
4311 'MAIN_MODULE_EXPENSEREPORT' => array(
'class' =>
'modExpenseReport'),
4312 'MAIN_MODULE_DON' => array(
'class' =>
'modDon'),
4313 'MAIN_MODULE_ECM' => array(
'class' =>
'modECM',
'remove'=>1),
4314 'MAIN_MODULE_KNOWLEDGEMANAGEMENT' => array(
'class' =>
'modKnowledgeManagement',
'remove'=>1),
4315 'MAIN_MODULE_EVENTORGANIZATION' => array(
'class' =>
'modEventOrganization',
'remove'=>1),
4316 'MAIN_MODULE_PAYBOX' => array(
'class' =>
'modPaybox',
'remove'=>1),
4317 'MAIN_MODULE_SUPPLIERPROPOSAL' => array(
'class' =>
'modSupplierProposal',
'remove'=>1),
4318 'MAIN_MODULE_OPENSURVEY' => array(
'class' =>
'modOpenSurvey',
'remove'=>1),
4319 'MAIN_MODULE_PRODUCTBATCH' => array(
'class' =>
'modProductBatch',
'remove'=>1),
4320 'MAIN_MODULE_TAKEPOS' => array(
'class' =>
'modTakePos',
'remove'=>1),
4321 'MAIN_MODULE_EMAILCOLLECTOR' => array(
'class' =>
'modEmailCollector',
'remove'=>1),
4324 foreach ($listofmodule as $moduletoreload => $reloadmode) {
4325 if (empty($moduletoreload) || (empty($conf->global->$moduletoreload) && !$force)) {
4331 if (!empty($reloadactionformodules[$moduletoreload])) {
4332 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreload.
" with mode ".$reloadmode);
4334 $val = $reloadactionformodules[$moduletoreload];
4335 $classformodule = $val[
'class'];
4336 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/'.$classformodule.
'.class.php';
4338 $mod =
new $classformodule($db);
4339 if (!empty($val[
'remove'])) {
4340 $mod->remove(
'noboxes');
4342 if (!empty($val[
'deleteinsertmenus'])) {
4344 $mod->delete_menus();
4345 $mod->insert_menus();
4347 $mod->init($reloadmode);
4352 $tmp = preg_match(
'/MAIN_MODULE_([a-zA-Z0-9]+)/', $moduletoreload, $reg);
4353 if (!empty($reg[1])) {
4354 if (strtoupper($moduletoreload) == $moduletoreload) {
4355 $moduletoreloadshort = ucfirst(strtolower($reg[1]));
4358 $moduletoreloadshort = $reg[1];
4361 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreloadshort.
" with mode ".$reloadmode.
" (generic code)");
4363 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php';
4365 $classname =
'mod'.$moduletoreloadshort;
4366 $mod =
new $classname($db);
4369 $mod->delete_menus();
4370 $mod->init($reloadmode);
4372 dolibarr_install_syslog(
'Failed to include '.DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4374 $res = @
dol_include_once(strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4376 $classname =
'mod'.$moduletoreloadshort;
4377 $mod =
new $classname($db);
4378 $mod->init($reloadmode);
4380 dolibarr_install_syslog(
'Failed to include '.strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4381 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4387 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4392 if (!empty($mod) && is_object($mod)) {
4393 print
'<tr class="trforrunsql"><td colspan="4">';
4394 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: ';
4395 print $langs->trans(
'MigrationReloadModule').
' '.$mod->getName();
4396 print
"<!-- (".$reloadmode.
") -->";
4421 $listofmenuhandler = array();
4422 if ($conf->global->MAIN_MENU_STANDARD ==
'auguria_menu' || $conf->global->MAIN_MENU_SMARTPHONE ==
'auguria_menu'
4423 || $conf->global->MAIN_MENUFRONT_STANDARD ==
'auguria_menu' || $conf->global->MAIN_MENUFRONT_SMARTPHONE ==
'auguria_menu') {
4424 $listofmenuhandler[
'auguria'] = 1;
4427 foreach ($listofmenuhandler as $key => $val) {
4428 print
'<tr class="trforrunsql"><td colspan="4">';
4432 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: '.$langs->trans(
'MenuHandler').
" ".$key.
"<br>\n";
4435 $dir = DOL_DOCUMENT_ROOT.
"/core/menus/";
4436 $file =
'init_menu_'.$key.
'.sql';
4437 if (file_exists($dir.$file)) {
4438 $result =
run_sql($dir.$file, 1,
'', 1, $key);
4454 global $conf, $db, $langs, $user;
4456 print
'<tr><td colspan="4">';
4458 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4460 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4461 $fuser =
new User($db);
4462 if (!is_object($user)) {
4466 $sql =
"SELECT rowid as uid, entity from ".MAIN_DB_PREFIX.
"user";
4467 $resql = $db->query($sql);
4469 while ($obj = $db->fetch_object($resql)) {
4471 $fuser->id = $obj->uid;
4472 $fuser->entity = $obj->entity;
4475 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4477 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4479 $dir = $conf->user->multidir_output[$entity];
4484 $origin = $dir.
'/'.
get_exdir($fuser->id, 2, 0, 1, $fuser,
'user');
4485 $destin = $dir.
'/'.$fuser->id;
4493 $handle = opendir($origin_osencoded);
4494 if (is_resource($handle)) {
4495 while (($file = readdir($handle)) !==
false) {
4496 if ($file ==
'.' || $file ==
'..') {
4501 $thumbs = opendir($origin_osencoded.
'/'.$file);
4502 if (is_resource($thumbs)) {
4504 while (($thumb = readdir($thumbs)) !==
false) {
4506 if ($thumb ==
'.' || $thumb ==
'..') {
4512 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb, 0, 0);
4522 dol_copy($origin.
'/'.$file, $destin.
'/'.$file, 0, 0);
4543 global $db, $langs, $user;
4545 print
'<tr><td colspan="4">';
4547 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4549 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4550 $fuser =
new User($db);
4551 if (!is_object($user)) {
4555 $sql =
"SELECT rowid as uid, entity, photo from ".MAIN_DB_PREFIX.
"user";
4556 $resql = $db->query($sql);
4558 while ($obj = $db->fetch_object($resql)) {
4560 $fuser->id = $obj->uid;
4561 $fuser->entity = $obj->entity;
4562 $fuser->photo = $obj->photo;
4565 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4567 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4569 $dir = DOL_DATA_ROOT.
'/users';
4574 $origin = $dir.
'/'.$fuser->id;
4575 $destin = $dir.
'/'.$fuser->id.
'/photos';
4583 $handle = opendir($origin_osencoded);
4584 if (is_resource($handle)) {
4585 while (($file = readdir($handle)) !==
false) {
4586 if ($file ==
'.' || $file ==
'..' || $file ==
'photos') {
4589 if (!empty($fuser->photo) && ($file != $fuser->photo && $file !=
'thumbs')) {
4594 $thumbs = opendir($origin_osencoded.
'/'.$file);
4595 if (is_resource($thumbs)) {
4597 while (($thumb = readdir($thumbs)) !==
false) {
4599 if ($thumb ==
'.' || $thumb ==
'..') {
4605 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb, 0, 0);
4614 dol_copy($origin.
'/'.$file, $destin.
'/'.$file, 0, 0);
4651 print
'<tr><td colspan="4">';
4652 $sql =
'SELECT rowid, socialnetworks';
4653 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'user WHERE';
4654 $sql .=
" skype IS NOT NULL OR skype <> ''";
4655 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4656 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4657 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4658 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4659 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4660 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4661 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4662 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4664 $resql = $db->query($sql);
4666 while ($obj = $db->fetch_object($resql)) {
4667 $arraysocialnetworks = array();
4668 if (!empty($obj->skype)) {
4669 $arraysocialnetworks[
'skype'] = $obj->skype;
4671 if (!empty($obj->twitter)) {
4672 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4674 if (!empty($obj->facebook)) {
4675 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4677 if (!empty($obj->linkedin)) {
4678 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4680 if (!empty($obj->instagram)) {
4681 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4683 if (!empty($obj->snapchat)) {
4684 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4686 if (!empty($obj->googleplus)) {
4687 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4689 if (!empty($obj->youtube)) {
4690 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4692 if (!empty($obj->whatsapp)) {
4693 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4695 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4696 $obj->socialnetworks =
'[]';
4698 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4699 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"user SET socialnetworks='".$db->escape(json_encode($socialnetworks,
true)).
"'";
4700 $sqlupd .=
', skype=null';
4701 $sqlupd .=
', twitter=null';
4702 $sqlupd .=
', facebook=null';
4703 $sqlupd .=
', linkedin=null';
4704 $sqlupd .=
', instagram=null';
4705 $sqlupd .=
', snapchat=null';
4706 $sqlupd .=
', googleplus=null';
4707 $sqlupd .=
', youtube=null';
4708 $sqlupd .=
', whatsapp=null';
4709 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4711 $resqlupd = $db->query($sqlupd);
4726 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Users').
"</b><br>\n";
4740 print
'<tr><td colspan="4">';
4743 print
'<tr><td colspan="4">';
4744 $sql =
'SELECT rowid, socialnetworks';
4745 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'adherent WHERE ';
4746 $sql .=
" skype IS NOT NULL OR skype <> ''";
4747 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4748 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4749 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4750 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4751 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4752 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4753 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4754 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4756 $resql = $db->query($sql);
4758 while ($obj = $db->fetch_object($resql)) {
4759 $arraysocialnetworks = array();
4760 if (!empty($obj->skype)) {
4761 $arraysocialnetworks[
'skype'] = $obj->skype;
4763 if (!empty($obj->twitter)) {
4764 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4766 if (!empty($obj->facebook)) {
4767 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4769 if (!empty($obj->linkedin)) {
4770 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4772 if (!empty($obj->instagram)) {
4773 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4775 if (!empty($obj->snapchat)) {
4776 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4778 if (!empty($obj->googleplus)) {
4779 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4781 if (!empty($obj->youtube)) {
4782 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4784 if (!empty($obj->whatsapp)) {
4785 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4787 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4788 $obj->socialnetworks =
'[]';
4790 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4791 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"adherent SET socialnetworks='".$db->escape(json_encode($socialnetworks,
true)).
"'";
4792 $sqlupd .=
', skype=null';
4793 $sqlupd .=
', twitter=null';
4794 $sqlupd .=
', facebook=null';
4795 $sqlupd .=
', linkedin=null';
4796 $sqlupd .=
', instagram=null';
4797 $sqlupd .=
', snapchat=null';
4798 $sqlupd .=
', googleplus=null';
4799 $sqlupd .=
', youtube=null';
4800 $sqlupd .=
', whatsapp=null';
4801 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4803 $resqlupd = $db->query($sqlupd);
4818 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Members').
"</b><br>\n";
4834 print
'<tr><td colspan="4">';
4835 $sql =
'SELECT rowid, socialnetworks';
4836 $sql .=
', jabberid, skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'socpeople WHERE';
4837 $sql .=
" jabberid IS NOT NULL OR jabberid <> ''";
4838 $sql .=
" OR skype IS NOT NULL OR skype <> ''";
4839 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4840 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4841 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4842 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4843 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4844 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4845 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4846 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4848 $resql = $db->query($sql);
4850 while ($obj = $db->fetch_object($resql)) {
4851 $arraysocialnetworks = array();
4852 if (!empty($obj->jabberid)) {
4853 $arraysocialnetworks[
'jabber'] = $obj->jabberid;
4855 if (!empty($obj->skype)) {
4856 $arraysocialnetworks[
'skype'] = $obj->skype;
4858 if (!empty($obj->twitter)) {
4859 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4861 if (!empty($obj->facebook)) {
4862 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4864 if (!empty($obj->linkedin)) {
4865 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4867 if (!empty($obj->instagram)) {
4868 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4870 if (!empty($obj->snapchat)) {
4871 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4873 if (!empty($obj->googleplus)) {
4874 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4876 if (!empty($obj->youtube)) {
4877 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4879 if (!empty($obj->whatsapp)) {
4880 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4882 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4883 $obj->socialnetworks =
'[]';
4885 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4886 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"socpeople SET socialnetworks='".$db->escape(json_encode($socialnetworks,
true)).
"'";
4887 $sqlupd .=
', jabberid=null';
4888 $sqlupd .=
', skype=null';
4889 $sqlupd .=
', twitter=null';
4890 $sqlupd .=
', facebook=null';
4891 $sqlupd .=
', linkedin=null';
4892 $sqlupd .=
', instagram=null';
4893 $sqlupd .=
', snapchat=null';
4894 $sqlupd .=
', googleplus=null';
4895 $sqlupd .=
', youtube=null';
4896 $sqlupd .=
', whatsapp=null';
4897 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4899 $resqlupd = $db->query($sqlupd);
4914 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Contacts').
"</b><br>\n";
4930 print
'<tr><td colspan="4">';
4931 $sql =
'SELECT rowid, socialnetworks';
4932 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'societe WHERE ';
4933 $sql .=
" skype IS NOT NULL OR skype <> ''";
4934 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4935 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4936 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4937 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4938 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4939 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4940 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4941 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4943 $resql = $db->query($sql);
4945 while ($obj = $db->fetch_object($resql)) {
4946 $arraysocialnetworks = array();
4947 if (!empty($obj->skype)) {
4948 $arraysocialnetworks[
'skype'] = $obj->skype;
4950 if (!empty($obj->twitter)) {
4951 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4953 if (!empty($obj->facebook)) {
4954 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4956 if (!empty($obj->linkedin)) {
4957 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4959 if (!empty($obj->instagram)) {
4960 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4962 if (!empty($obj->snapchat)) {
4963 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4965 if (!empty($obj->googleplus)) {
4966 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4968 if (!empty($obj->youtube)) {
4969 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4971 if (!empty($obj->whatsapp)) {
4972 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4974 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4975 $obj->socialnetworks =
'[]';
4977 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4978 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"societe SET socialnetworks='".$db->escape(json_encode($socialnetworks,
true)).
"'";
4979 $sqlupd .=
', skype=null';
4980 $sqlupd .=
', twitter=null';
4981 $sqlupd .=
', facebook=null';
4982 $sqlupd .=
', linkedin=null';
4983 $sqlupd .=
', instagram=null';
4984 $sqlupd .=
', snapchat=null';
4985 $sqlupd .=
', googleplus=null';
4986 $sqlupd .=
', youtube=null';
4987 $sqlupd .=
', whatsapp=null';
4988 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4990 $resqlupd = $db->query($sqlupd);
5005 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Thirdparties').
"</b><br>\n";
5025 print
'<tr class="trforrunsql"><td colspan="4">';
5026 $sql =
'SELECT rowid, field';
5027 if ($mode ==
'export') {
5030 $sql .=
' FROM '.MAIN_DB_PREFIX.$mode.
'_model WHERE';
5031 $sql .=
" type LIKE 'propale_%' OR type LIKE 'commande_%' OR type LIKE 'facture_%'";
5033 $resql = $db->query($sql);
5035 while ($obj = $db->fetch_object($resql)) {
5036 $oldfield = $obj->field;
5037 $newfield = str_replace(array(
',f.facnumber',
'f.facnumber,',
'f.total,',
'f.tva,'), array(
',f.ref',
'f.ref,',
'f.total_ht,',
'f.total_tva,'), $oldfield);
5039 if ($mode ==
'export') {
5040 $oldfilter = $obj->filter;
5041 $newfilter = str_replace(array(
'f.facnumber=',
'f.total=',
'f.tva='), array(
'f.ref=',
'f.total_ht=',
'f.total_tva='), $oldfilter);
5047 if ($oldfield != $newfield || $oldfilter != $newfilter) {
5048 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.$mode.
"_model SET field = '".$db->escape($newfield).
"'";
5049 if ($mode ==
'export') {
5050 $sqlupd .=
", filter = '".$db->escape($newfilter).
"'";
5052 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5053 $resultstring .=
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$sqlupd.
"</td></tr>\n";
5054 $resqlupd = $db->query($sqlupd);
5070 print
'<b>'.$langs->trans(
'MigrationImportOrExportProfiles', $mode).
"</b><br>\n";
5073 if ($resultstring) {
5074 print $resultstring;
5076 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5094 print
'<tr class="trforrunsql"><td colspan="4">';
5095 print
'<b>'.$langs->trans(
'MigrationContractLineRank').
"</b><br>\n";
5097 $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";
5098 $sql .=
" ORDER BY c.rowid,cd.rowid";
5100 $resql = $db->query($sql);
5103 $current_contract=0;
5104 while ($obj = $db->fetch_object($resql)) {
5105 if (empty($current_contract) || $current_contract==$obj->cid) {
5111 $sqlUpd =
"UPDATE ".$db->prefix().
"contratdet SET rang=".(int) $currentRank.
" WHERE rowid=".(
int) $obj->cdid;
5112 $resultstring =
'.';
5113 print $resultstring;
5114 $resqlUpd = $db->query($sqlUpd);
5120 $current_contract = $obj->cid;
5133 if (!$resultstring) {
5134 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
run_sql($sqlfile, $silent=1, $entity=0, $usesavepoint=1, $handler='', $okerror='default', $linelengthlimit=32768, $nocommentremoval=0, $offsetforchartofaccount=0, $colspan=0, $onlysqltoimportwebsite=0, $database='')
Launch a sql file.
versioncompare($versionarray1, $versionarray2)
Compare 2 versions (stored into 2 arrays).
Class to manage Blocked Log.
Class to manage line orders.
Class to manage lines of contracts.
Class to manage invoices.
Class to manage invoice lines.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation models.
Class to manage order lines.
Class to manage commercial proposal lines.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
dol_is_file($pathoffile)
Return if path is a file.
dol_copy($srcfile, $destfile, $newmask=0, $overwriteifexists=1, $testvirus=0, $indexdatabase=0)
Copy a file to another file.
dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayreplacement=null, $excludesubdir=0, $excludefileext=null)
Copy a dir to another dir.
dol_is_dir($folder)
Test if filename is a directory.
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_now($mode='auto')
Return date for now.
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.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
getDoliDBInstance($type, $host, $user, $pass, $name, $port)
Return a DoliDB instance (database handler).
pHeader($subtitle, $next, $action='set', $param='', $forcejqueryurl='', $csstable='main-inside')
Show HTML header of install pages.
pFooter($nonext=0, $setuplang='', $jscheckfunction='', $withpleasewait=0, $morehtml='')
Print HTML footer of install pages.
dolibarr_install_syslog($message, $level=LOG_DEBUG)
Log function for install pages.
calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocaltax1_rate, $uselocaltax2_rate, $remise_percent_global, $price_base_type, $info_bits, $type, $seller='', $localtaxes_array='', $progress=100, $multicurrency_tx=1, $pu_devise=0, $multicurrency_code='')
Calculate totals (net, vat, ...) of a line.
dol_decode($chain, $key='1')
Decode a base 64 encoded + specific delta change.
migrate_links_transfert($db, $langs, $conf)
Function to migrate links into llx_bank_url.
migrate_paiements_orphelins_1($db, $langs, $conf)
Corrige paiement orphelins (liens paumes suite a bugs) Pour verifier s'il reste des orphelins: select...
migrate_user_rights_entity($db, $langs, $conf)
Migrate to add entity value into llx_user_rights.
migrate_reload_modules($db, $langs, $conf, $listofmodule=array(), $force=0)
Disable/Reenable features modules.
migrate_contracts_date3($db, $langs, $conf)
Mise a jour des dates de creation de contrat.
migrate_restore_missing_links($db, $langs, $conf)
Migration du champ fk_remise_except dans llx_facturedet doit correspondre a lien dans llx_societe_rem...
migrate_rename_directories($db, $langs, $conf, $oldname, $newname)
Migration directory.
migrate_project_task_actors($db, $langs, $conf)
Migration de la table llx_projet_task_actors vers llx_element_contact.
migrate_commande_deliveryaddress($db, $langs, $conf)
Migration du champ fk_adresse_livraison dans expedition 2.6 -> 2.7.
if($db->connected) if( $ret) migrate_paiements($db, $langs, $conf)
Reporte liens vers une facture de paiements sur table de jointure (lien n-n paiements factures)
migrate_project_user_resp($db, $langs, $conf)
Migration du champ fk_user_resp de llx_projet vers llx_element_contact.
migrate_contracts_open($db, $langs, $conf)
Reouverture des contrats qui ont au moins une ligne non fermee.
migrate_shipping_delivery($db, $langs, $conf)
Migrate link stored into fk_expedition into llx_element_element.
migrate_delete_old_dir($db, $langs, $conf)
Remove deprecated directories.
migrate_price_propal($db, $langs, $conf)
Update total of proposal lines.
migrate_stocks($db, $langs, $conf)
Migration du champ stock dans produits.
migrate_paiementfourn_facturefourn($db, $langs, $conf)
Factures fournisseurs.
migrate_contacts_socialnetworks()
Migrate contacts fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_customerorder_shipping($db, $langs, $conf)
Migrate order ref_customer and date_delivery fields to llx_expedition.
migrate_detail_livraison($db, $langs, $conf)
Migration des details commandes dans les details livraisons.
migrate_remise_except_entity($db, $langs, $conf)
Migrate to add entity value into llx_societe_remise_except.
migrate_paiements_orphelins_2($db, $langs, $conf)
Corrige paiement orphelins (liens paumes suite a bugs) Pour verifier s'il reste des orphelins: select...
migrate_price_contrat($db, $langs, $conf)
Update total of contract lines.
migrate_users_socialnetworks()
Migrate users fields facebook and co to socialnetworks.
migrate_user_photospath2()
Migrate file from old path users/99/file.jpg into users/99/photos/file.jpg.
migrate_contracts_det($db, $langs, $conf)
Mise a jour des contrats (gestion du contrat + detail de contrat)
migrate_price_facture($db, $langs, $conf)
Update total of invoice lines.
migrate_usergroup_rights_entity($db, $langs, $conf)
Migrate to add entity value into llx_usergroup_rights.
migrate_relationship_tables($db, $langs, $conf, $table, $fk_source, $sourcetype, $fk_target, $targettype)
Migration des tables de relation.
migrate_modeles($db, $langs, $conf)
Mise a jour des modeles selectionnes.
migrate_reset_blocked_log($db, $langs, $conf)
Migrate to reset the blocked log for V7+ algorithm.
migrate_mode_reglement($db, $langs, $conf)
Migrate link stored into fk_mode_reglement.
migrate_export_import_profiles($mode='export')
Migrate export and import profiles to fix field name that was renamed.
migrate_contracts_date2($db, $langs, $conf)
Update contracts with date min real if service date is lower.
migrate_commande_expedition($db, $langs, $conf)
Correspondance des expeditions et des commandes clients dans la table llx_co_exp.
migrate_actioncomm_element($db, $langs, $conf)
Migrate link stored into fk_xxxx into fk_element and elementtype.
migrate_user_photospath()
Migrate file from old path to new one for users.
migrate_thirdparties_socialnetworks()
Migrate thirdparties fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_event_assignement($db, $langs, $conf)
Migrate event assignement to owner.
migrate_clean_association($db, $langs, $conf)
Delete duplicates in table categorie_association.
migrate_commande_livraison($db, $langs, $conf)
Correspondance des livraisons et des commandes clients dans la table llx_co_liv.
migrate_event_assignement_contact($db, $langs, $conf)
Migrate event assignement to owner.
migrate_contracts_date1($db, $langs, $conf)
Mise a jour des date de contrats non renseignees.
migrate_remise_entity($db, $langs, $conf)
Migrate to add entity value into llx_societe_remise.
migrate_contractdet_rank()
Migrate Rank into contract line.
migrate_menus($db, $langs, $conf)
Migration of menus (use only 1 table instead of 3) 2.6 -> 2.7.
migrate_categorie_association($db, $langs, $conf)
Migrate categorie association.
migrate_delete_old_files($db, $langs, $conf)
Delete deprecated files.
migrate_price_commande_fournisseur($db, $langs, $conf)
Update total of purchase order lines.
migrate_element_time($db, $langs, $conf)
Migrate duration in seconds.
migrate_members_socialnetworks()
Migrate members fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_reload_menu($db, $langs, $conf)
Reload SQL menu file (if dynamic menus, if modified by version)
migrate_price_commande($db, $langs, $conf)
Update total of sales order lines.
migrate_shipping_delivery2($db, $langs, $conf)
We try to complete field ref_customer and date_delivery that are empty into llx_livraison.