44define(
'ALLOWED_IF_UPGRADE_UNLOCK_FOUND', 1);
45include_once
'inc.php';
52 print
'Error: Dolibarr config file was not found. This may means that Dolibarr is not installed yet. Please call the page "/install/index.php" instead of "/install/upgrade.php").';
71@phan-var-force string $dolibarr_main_db_type
74require_once $dolibarr_main_document_root.
'/compta/facture/class/facture.class.php';
75require_once $dolibarr_main_document_root.
'/comm/propal/class/propal.class.php';
76require_once $dolibarr_main_document_root.
'/contrat/class/contrat.class.php';
77require_once $dolibarr_main_document_root.
'/commande/class/commande.class.php';
78require_once $dolibarr_main_document_root.
'/fourn/class/fournisseur.commande.class.php';
79require_once $dolibarr_main_document_root.
'/core/lib/price.lib.php';
80require_once $dolibarr_main_document_root.
'/core/class/menubase.class.php';
81require_once $dolibarr_main_document_root.
'/core/lib/admin.lib.php';
82require_once $dolibarr_main_document_root.
'/core/lib/files.lib.php';
83require_once $dolibarr_main_document_root.
'/user/class/user.class.php';
84require_once $dolibarr_main_document_root.
'/blockedlog/lib/blockedlog.lib.php';
93$err = error_reporting();
100error_reporting($err);
102$setuplang =
GETPOST(
"selectlang",
'aZ09', 3) ?
GETPOST(
"selectlang",
'aZ09', 3) :
'auto';
103$langs->setDefaultLang($setuplang);
104$versionfrom =
GETPOST(
"versionfrom",
'alpha', 3) ?
GETPOST(
"versionfrom",
'alpha', 3) : (empty($argv[1]) ?
'' : $argv[1]);
105$versionto =
GETPOST(
"versionto",
'alpha', 3) ?
GETPOST(
"versionto",
'alpha', 3) : (empty($argv[2]) ?
'' : $argv[2]);
106$enablemodules =
GETPOST(
"enablemodules",
'alpha', 3) ?
GETPOST(
"enablemodules",
'alpha', 3) : (empty($argv[3]) ?
'' : $argv[3]);
108$langs->loadLangs(array(
"admin",
"install",
"bills",
"suppliers"));
110if ($dolibarr_main_db_type ==
'mysqli') {
113if ($dolibarr_main_db_type ==
'pgsql') {
116if ($dolibarr_main_db_type ==
'mssql') {
121dolibarr_install_syslog(
"--- upgrade2: entering upgrade2.php page ".$versionfrom.
" ".$versionto.
" ".$enablemodules);
122if (!is_object(
$conf)) {
132if ((!$versionfrom || preg_match(
'/version/', $versionfrom)) && (!$versionto || preg_match(
'/version/', $versionto))) {
133 print
'Error: Parameter versionfrom or versionto missing or having a bad format.'.
"\n";
134 print
'Upgrade must be ran from command line with parameters or called from page install/index.php (like a first install)'.
"\n";
136 $sapi_type = php_sapi_name();
137 $script_file = basename(__FILE__);
138 if (substr($sapi_type, 0, 3) ==
'cli') {
139 print
'Syntax from command line: '.$script_file.
" x.y.z a.b.c [MAIN_MODULE_NAME1_TO_ENABLE,MAIN_MODULE_NAME2_TO_ENABLE...]\n";
140 print
'Example, upgrade from 19 to 20: '.$script_file.
" 19.0.0 20.0.0\n";
141 print
'Example, enable a module only: '.$script_file.
" 0.0.0 0.0.0 MAIN_MODULE_Adherent\n";
147pHeader(
'',
'step5',
GETPOST(
'action',
'aZ09') ?
GETPOST(
'action',
'aZ09') :
'upgrade',
'versionfrom='.$versionfrom.
'&versionto='.$versionto,
'',
'main-inside main-inside-borderbottom');
152if (!
GETPOST(
'action',
'aZ09') || preg_match(
'/upgrade/i',
GETPOST(
'action',
'aZ09'))) {
153 print
'<h3><img class="valignmiddle inline-block paddingright" src="../public/theme/common/database.svg" width="20" alt="Database"> ';
154 print
'<span class="inline-block valignmiddle">'.$langs->trans(
'DataMigration').
'</span></h3>';
156 print
'<table class="centpercent">';
159 if ((!empty($dolibarr_main_db_pass) && preg_match(
'/(crypted|dolcrypt):/i', (
string) $dolibarr_main_db_pass)) || !empty($dolibarr_main_db_encrypted_pass)) {
160 require_once $dolibarr_main_document_root.
'/core/lib/security.lib.php';
161 if (!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) {
162 $dolibarr_main_db_pass = preg_replace(
'/crypted:/i',
'', (
string) $dolibarr_main_db_pass);
163 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
164 $dolibarr_main_db_pass =
dol_decode((
string) $dolibarr_main_db_pass);
165 } elseif (preg_match(
'/dolcrypt:/i', (
string) $dolibarr_main_db_pass)) {
166 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
167 $dolibarr_main_db_pass =
dolDecrypt((
string) $dolibarr_main_db_pass);
169 $dolibarr_main_db_pass =
dol_decode((
string) $dolibarr_main_db_encrypted_pass);
174 $conf->db->type = $dolibarr_main_db_type;
175 $conf->db->host = $dolibarr_main_db_host;
176 $conf->db->port = $dolibarr_main_db_port;
177 $conf->db->name = $dolibarr_main_db_name;
178 $conf->db->user = $dolibarr_main_db_user;
179 $conf->db->pass = $dolibarr_main_db_pass;
183 if (!
$db->connected) {
184 print
'<tr><td colspan="4">'.$langs->trans(
"ErrorFailedToConnectToDatabase",
$conf->db->name).
'</td><td class="right">'.$langs->trans(
'Error').
'</td></tr>';
190 if (
$db->database_selected) {
197 if (empty($dolibarr_main_db_encryption)) {
198 $dolibarr_main_db_encryption = 0;
200 $conf->db->dolibarr_main_db_encryption = $dolibarr_main_db_encryption;
201 if (empty($dolibarr_main_db_cryptkey)) {
202 $dolibarr_main_db_cryptkey =
'';
204 $conf->db->dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey;
207 $conf->setValues($db);
211 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
212 $conf->modules[
'syslog'] =
'syslog';
213 $conf->global->SYSLOG_LEVEL = constant(
'LOG_DEBUG');
214 if (!defined(
'SYSLOG_HANDLERS')) {
215 define(
'SYSLOG_HANDLERS',
'["mod_syslog_file"]');
217 if (!defined(
'SYSLOG_FILE')) {
218 if (@is_writable(
'/tmp')) {
219 define(
'SYSLOG_FILE',
'/tmp/dolibarr_install.log');
220 } elseif (!empty($_ENV[
"TMP"]) && @is_writable($_ENV[
"TMP"])) {
221 define(
'SYSLOG_FILE', $_ENV[
"TMP"].
'/dolibarr_install.log');
222 } elseif (!empty($_ENV[
"TEMP"]) && @is_writable($_ENV[
"TEMP"])) {
223 define(
'SYSLOG_FILE', $_ENV[
"TEMP"].
'/dolibarr_install.log');
224 } elseif (@is_writable(
'../../../../') && @file_exists(
'../../../../startdoliwamp.bat')) {
225 define(
'SYSLOG_FILE',
'../../../../dolibarr_install.log');
226 } elseif (@is_writable(
'../../')) {
227 define(
'SYSLOG_FILE',
'../../dolibarr_install.log');
231 if (defined(
'SYSLOG_FILE')) {
232 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
234 if (!defined(
'SYSLOG_FILE_NO_ERROR')) {
235 define(
'SYSLOG_FILE_NO_ERROR', 1);
238 $handlers = array(
'mod_syslog_file');
239 foreach ($handlers as $handler) {
240 $file = DOL_DOCUMENT_ROOT.
'/core/modules/syslog/'.$handler.
'.php';
241 if (!file_exists($file)) {
242 throw new Exception(
'Missing log handler file '.$handler.
'.php');
246 $loghandlerinstance =
new $handler();
247 if (!$loghandlerinstance instanceof
LogHandler) {
248 throw new Exception(
'Log handler does not extend LogHandler');
251 if (empty(
$conf->loghandlers[$handler])) {
252 $conf->loghandlers[$handler] = $loghandlerinstance;
257 $listofentities = array(1);
260 include_once DOL_DOCUMENT_ROOT.
'/core/class/hookmanager.class.php';
262 $hookmanager->initHooks(array(
'upgrade2'));
264 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto);
267 $reshook = $hookmanager->executeHooks(
'doUpgradeBefore', $parameters,
$object, $action);
268 if ($reshook >= 0 && is_array($hookmanager->resArray)) {
270 $listofentities = array_unique(array_merge($listofentities, $hookmanager->resArray));
280 dol_syslog(
"Process upgrade2 (step common to all entities)");
283 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN birth date';
285 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemployment date';
287 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemploymentend date';
289 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_range integer';
291 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_c_exp_tax_cat integer';
293 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN langs varchar(24)';
295 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fieldcomputed text';
297 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fielddefault varchar(255)';
299 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
"extrafields ADD COLUMN enabled varchar(255) DEFAULT '1'";
301 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN help text';
303 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user_rights ADD COLUMN entity integer DEFAULT 1 NOT NULL';
309 foreach ($listofentities as $entity) {
310 dol_syslog(
"Process upgrade2 (step a) for entity ".$entity);
313 $conf->setEntityValues($db, $entity);
316 if (defined(
'SYSLOG_FILE')) {
317 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
320 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
322 $versiontoarray = array();
323 $versionranarray = array();
325 dol_syslog(
"Process upgrade2 (step b) for entity ".$entity);
328 if (count($listofentities) > 1) {
329 print
'<tr><td colspan="4">*** '.$langs->trans(
"Entity").
' '.$entity.
'</td></tr>'.
"\n";
340 $versiontoarray = explode(
'.', $versionto);
341 $versionranarray = explode(
'.', DOL_VERSION);
343 $afterversionarray = explode(
'.',
'2.0.0');
344 $beforeversionarray = explode(
'.',
'2.7.9');
346 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
407 $afterversionarray = explode(
'.',
'2.7.9');
408 $beforeversionarray = explode(
'.',
'2.8.9');
411 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
435 $afterversionarray = explode(
'.',
'2.8.9');
436 $beforeversionarray = explode(
'.',
'2.9.9');
438 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
450 $afterversionarray = explode(
'.',
'2.9.9');
451 $beforeversionarray = explode(
'.',
'3.0.9');
457 $afterversionarray = explode(
'.',
'3.0.9');
458 $beforeversionarray = explode(
'.',
'3.1.9');
460 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
468 $afterversionarray = explode(
'.',
'3.1.9');
469 $beforeversionarray = explode(
'.',
'3.2.9');
471 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
481 $afterversionarray = explode(
'.',
'3.2.9');
482 $beforeversionarray = explode(
'.',
'3.3.9');
484 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
493 $afterversionarray = explode(
'.',
'3.6.9');
494 $beforeversionarray = explode(
'.',
'3.7.9');
496 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
502 $afterversionarray = explode(
'.',
'3.7.9');
503 $beforeversionarray = explode(
'.',
'3.8.9');
509 $afterversionarray = explode(
'.',
'3.9.9');
510 $beforeversionarray = explode(
'.',
'4.0.9');
512 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
518 $afterversionarray = explode(
'.',
'4.0.9');
519 $beforeversionarray = explode(
'.',
'5.0.9');
521 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
531 $afterversionarray = explode(
'.',
'5.0.9');
532 $beforeversionarray = explode(
'.',
'6.0.9');
535 global $multicompany_transverse_mode;
538 if (empty($multicompany_transverse_mode)) {
539 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
551 $afterversionarray = explode(
'.',
'6.0.9');
552 $beforeversionarray = explode(
'.',
'7.0.9');
554 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
563 $afterversionarray = explode(
'.',
'7.0.9');
564 $beforeversionarray = explode(
'.',
'8.0.9');
566 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
572 $afterversionarray = explode(
'.',
'8.0.9');
573 $beforeversionarray = explode(
'.',
'9.0.9');
579 $afterversionarray = explode(
'.',
'10.0.9');
580 $beforeversionarray = explode(
'.',
'11.0.9');
582 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
591 $afterversionarray = explode(
'.',
'13.0.9');
592 $beforeversionarray = explode(
'.',
'14.0.9');
594 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
601 $afterversionarray = explode(
'.',
'15.0.9');
602 $beforeversionarray = explode(
'.',
'16.0.9');
604 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
611 $afterversionarray = explode(
'.',
'16.0.9');
612 $beforeversionarray = explode(
'.',
'17.0.9');
614 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
620 $afterversionarray = explode(
'.',
'17.0.9');
621 $beforeversionarray = explode(
'.',
'18.0.9');
623 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
637 $afterversionarray = explode(
'.',
'19.0.9');
638 $beforeversionarray = explode(
'.',
'20.0.9');
640 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
646 $afterversionarray = explode(
'.',
'20.0.9');
647 $beforeversionarray = explode(
'.',
'21.0.9');
651 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
657 $afterversionarray = explode(
'.',
'21.0.9');
658 $beforeversionarray = explode(
'.',
'22.0.9');
660 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
666 $afterversionarray = explode(
'.',
'22.0.9');
667 $beforeversionarray = explode(
'.',
'23.0.9');
669 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
679 $afterversionarray = explode(
'.',
'23.0.9');
680 $beforeversionarray = explode(
'.',
'24.0.9');
682 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
692 dol_syslog(
"Run migrate_... if migration is LAST ONE");
695 $listofmodule = array(
696 'MAIN_MODULE_ACCOUNTING' =>
'newboxdefonly',
697 'MAIN_MODULE_AGENDA' =>
'newboxdefonly',
698 'MAIN_MODULE_BOM' =>
'menuonly',
699 'MAIN_MODULE_BANQUE' =>
'menuonly',
700 'MAIN_MODULE_BARCODE' =>
'newboxdefonly',
701 'MAIN_MODULE_CRON' =>
'newboxdefonly',
702 'MAIN_MODULE_COMMANDE' =>
'newboxdefonly',
703 'MAIN_MODULE_BLOCKEDLOG' =>
'noboxes',
704 'MAIN_MODULE_DON' =>
'newboxdefonly',
705 'MAIN_MODULE_ECM' =>
'newboxdefonly',
706 'MAIN_MODULE_EVENTORGANIZATION' =>
'newboxdefonly',
707 'MAIN_MODULE_EXPENSEREPORT' =>
'newboxdefonly',
708 'MAIN_MODULE_FACTURE' =>
'newboxdefonly',
709 'MAIN_MODULE_FOURNISSEUR' =>
'newboxdefonly',
710 'MAIN_MODULE_FICHEINTER' =>
'newboxdefonly',
711 'MAIN_MODULE_HOLIDAY' =>
'newboxdefonly',
712 'MAIN_MODULE_LOAN' =>
'newboxdefonly',
713 'MAIN_MODULE_MARGIN' =>
'menuonly',
714 'MAIN_MODULE_MRP' =>
'menuonly',
715 'MAIN_MODULE_OPENSURVEY' =>
'newboxdefonly',
716 'MAIN_MODULE_PARTNERSHIP' =>
'newboxdefonly',
717 'MAIN_MODULE_PRINTING' =>
'newboxdefonly',
718 'MAIN_MODULE_PRODUIT' =>
'newboxdefonly',
719 'MAIN_MODULE_RECRUITMENT' =>
'menuonly',
720 'MAIN_MODULE_RESOURCE' =>
'noboxes',
721 'MAIN_MODULE_SALARIES' =>
'newboxdefonly',
722 'MAIN_MODULE_SERVICE' =>
'newboxdefonly',
724 'MAIN_MODULE_SOCIETE' =>
'newboxdefonly',
725 'MAIN_MODULE_STRIPE' =>
'menuonly',
726 'MAIN_MODULE_TICKET' =>
'newboxdefonly',
727 'MAIN_MODULE_TAKEPOS' =>
'newboxdefonly',
728 'MAIN_MODULE_USER' =>
'newboxdefonly',
729 'MAIN_MODULE_VARIANTS' =>
'newboxdefonly',
730 'MAIN_MODULE_WEBSITE' =>
'newboxdefonly',
756 if (!$error && $enablemodules) {
758 $listofmodules = array();
759 $enablemodules = preg_replace(
'/enablemodules=/',
'', $enablemodules);
760 $tmplistofmodules = explode(
',', $enablemodules);
761 foreach ($tmplistofmodules as $value) {
762 $listofmodules[$value] =
'forceactivate';
766 if ($resultreloadmodules < 0) {
774 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' =>
$conf);
777 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterDB', $parameters,
$object, $action);
778 if ($hookmanager->resNbOfHooks > 0) {
780 print
'<tr><td colspan="4">';
781 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
782 print $hookmanager->error;
783 print
"<!-- (".$reshook.
") -->";
786 print
'<tr class="trforrunsql"><td colspan="4">';
787 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (DB)</b>: <span class="ok">OK</span>';
788 print
"<!-- (".$reshook.
") -->";
793 if (!empty(
$conf->modules_parts[
'hooks'])) {
794 print
'<tr class="trforrunsql"><td colspan="4">';
795 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterDB");
806 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"const SET VALUE = 'torefresh' WHERE name = 'MAIN_FIRST_PING_OK_ID'";
821 foreach ($listofentities as $entity) {
823 $conf->setEntityValues($db, $entity);
825 if (defined(
'SYSLOG_FILE')) {
826 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
828 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
832 $srcroot = DOL_DOCUMENT_ROOT.
'/install/medias';
833 $destroot = DOL_DATA_ROOT.
'/medias';
846 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' =>
$conf);
849 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterFiles', $parameters,
$object, $action);
850 if ($hookmanager->resNbOfHooks > 0) {
852 print
'<tr><td colspan="4">';
853 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
854 print $hookmanager->error;
855 print
"<!-- (".$reshook.
") -->";
858 print
'<tr class="trforrunsql"><td colspan="4">';
859 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (Files)</b>: <span class="ok">OK</span>';
860 print
"<!-- (".$reshook.
") -->";
865 if (!empty(
$conf->modules_parts[
'hooks'])) {
866 print
'<tr class="trforrunsql"><td colspan="4">';
867 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterFiles");
877 print
'<table width="100%">';
878 print
'<tr><td style="width: 30%">'.$langs->trans(
"MigrationFinished").
'</td>';
879 print
'<td class="right">';
883 print
'<span class="error">'.$langs->trans(
"Error").
'</span> - ';
887 print
'<script type="text/javascript">
888 jQuery(document).ready(function() {
889 function init_trrunsql()
891 console.log("toggle .trforrunsql");
892 jQuery(".trforrunsql").toggle();
895 jQuery(".trforrunsqlshowhide").click(function() {
900 print
'<a class="reposition trforrunsqlshowhide" href="#">'.$langs->trans(
"ShowHideDetails").
'</a>';
903 print
'</td></tr>'.
"\n";
909 print
'<div class="error">'.$langs->trans(
'ErrorWrongParameters').
'</div>';
914if ($error && isset($argv[1])) {
920pFooter($error ? 2 : 0, $setuplang);
922if ($db !==
null &&
$db->connected) {
943 print
'<tr><td colspan="4">';
946 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
948 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
949 $obj =
$db->fetch_object($result);
951 $sql =
"SELECT p.rowid, p.fk_facture, p.amount";
952 $sql .=
" FROM ".MAIN_DB_PREFIX.
"paiement as p";
953 $sql .=
" WHERE p.fk_facture > 0";
955 $resql =
$db->query($sql);
962 $num =
$db->num_rows($resql);
965 $obj =
$db->fetch_object($resql);
966 $row[$i][0] = $obj->rowid;
967 $row[$i][1] = $obj->fk_facture;
968 $row[$i][2] = $obj->amount;
976 print $langs->trans(
'MigrationPaymentsNumberToUpdate', $num).
"<br>\n";
980 for ($i = 0; $i < $num; $i++) {
981 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
982 $sql .=
" VALUES (".((int) $row[$i][1]).
",".((int) $row[$i][0]).
",".((float) $row[$i][2]).
")";
984 $res +=
$db->query($sql);
986 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET fk_facture = 0 WHERE rowid = ".((int) $row[$i][0]);
988 $res +=
$db->query($sql);
990 print $langs->trans(
'MigrationProcessPaymentUpdate', $row[$i][0]).
"<br>\n";
994 if (is_array($row) && $res == (2 * count($row))) {
996 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
999 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1002 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
1005 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
1023 print
'<tr><td colspan="4">';
1026 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
1028 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
1029 $obj =
$db->fetch_object($result);
1032 $sql =
"SELECT DISTINCT p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1033 $sql .=
" bu2.url_id as socid";
1034 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1035 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1036 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')";
1037 $sql .=
" WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid";
1038 $sql .=
" AND b.rappro = 1";
1039 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1041 $resql =
$db->query($sql);
1047 $num =
$db->num_rows($resql);
1050 $obj =
$db->fetch_object($resql);
1051 if ($obj->pamount == $obj->bamount && $obj->socid) {
1052 $row[$j][
'paymentid'] = $obj->rowid;
1053 $row[$j][
'pamount'] = $obj->pamount;
1054 $row[$j][
'fk_bank'] = $obj->fk_bank;
1055 $row[$j][
'bamount'] = $obj->bamount;
1056 $row[$j][
'socid'] = $obj->socid;
1057 $row[$j][
'datec'] = $obj->datec;
1067 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 1).
': '.count($row).
"<br>\n";
1072 for ($i = 0; $i < $num; $i++) {
1074 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>';
1078 $sql =
" SELECT DISTINCT f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1079 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1080 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1081 $sql .=
" AND pf.fk_facture IS NULL";
1082 $sql .=
" ORDER BY f.fk_statut";
1084 $resql =
$db->query($sql);
1086 $num =
$db->num_rows($resql);
1089 $obj =
$db->fetch_object($resql);
1090 $facid = $obj->rowid;
1092 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1093 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1095 $res +=
$db->query($sql);
1097 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1105 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1107 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1112 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1115 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1133 print
'<tr><td colspan="4">';
1136 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
1138 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
1139 $obj =
$db->fetch_object($result);
1142 $sql =
"SELECT DISTINCT p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1143 $sql .=
" bu2.url_id as socid";
1144 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1145 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1146 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')";
1147 $sql .=
" WHERE pf.rowid IS NULL AND (p.fk_bank = bu.fk_bank AND bu.type = 'payment') AND bu.fk_bank = b.rowid";
1148 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1150 $resql =
$db->query($sql);
1156 $num =
$db->num_rows($resql);
1159 $obj =
$db->fetch_object($resql);
1160 if ($obj->pamount == $obj->bamount && $obj->socid) {
1161 $row[$j][
'paymentid'] = $obj->rowid;
1162 $row[$j][
'pamount'] = $obj->pamount;
1163 $row[$j][
'fk_bank'] = $obj->fk_bank;
1164 $row[$j][
'bamount'] = $obj->bamount;
1165 $row[$j][
'socid'] = $obj->socid;
1166 $row[$j][
'datec'] = $obj->datec;
1179 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 2).
': '.count($row).
"<br>\n";
1183 for ($i = 0; $i < $num; $i++) {
1185 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>';
1189 $sql =
" SELECT DISTINCT f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1190 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1191 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1192 $sql .=
" AND pf.fk_facture IS NULL";
1193 $sql .=
" ORDER BY f.fk_statut";
1195 $resql =
$db->query($sql);
1197 $num =
$db->num_rows($resql);
1200 $obj =
$db->fetch_object($resql);
1201 $facid = $obj->rowid;
1203 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1204 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1206 $res +=
$db->query($sql);
1208 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1217 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1219 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1224 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1230 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiement DROP COLUMN fk_facture";
1240 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1257 print
'<tr><td colspan="4">';
1262 print
'<b>'.$langs->trans(
'MigrationContractsUpdate').
"</b><br>\n";
1264 $sql =
"SELECT c.rowid as cref, c.date_contrat, c.statut, c.fk_product, c.fk_facture, c.fk_user_author,";
1265 $sql .=
" p.ref, p.label, p.description, p.price, p.tva_tx, p.duration, cd.rowid";
1266 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c";
1267 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p";
1268 $sql .=
" ON c.fk_product = p.rowid";
1269 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"contratdet as cd";
1270 $sql .=
" ON c.rowid=cd.fk_contrat";
1271 $sql .=
" WHERE cd.rowid IS NULL AND p.rowid IS NOT NULL";
1272 $resql =
$db->query($sql);
1278 $num =
$db->num_rows($resql);
1281 print $langs->trans(
'MigrationContractsNumberToUpdate', $num).
"<br>\n";
1285 $obj =
$db->fetch_object($resql);
1287 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"contratdet (";
1288 $sql .=
"fk_contrat, fk_product, statut, label, description,";
1289 $sql .=
"date_ouverture_prevue, date_ouverture, date_fin_validite, tva_tx, qty,";
1290 $sql .=
"subprice, price_ht, fk_user_author, fk_user_ouverture)";
1291 $sql .=
" VALUES (";
1292 $sql .= ((int) $obj->cref).
", ".($obj->fk_product ? ((int) $obj->fk_product) : 0).
", ";
1294 $sql .=
"'".$db->escape($obj->label).
"', null, ";
1295 $sql .= ($obj->date_contrat ?
"'".$db->idate(
$db->jdate($obj->date_contrat)).
"'" :
"null").
", ";
1298 $sql .= ((float) $obj->tva_tx).
", 1, ";
1299 $sql .= ((float) $obj->price).
", ".((float) $obj->price).
", ".((int) $obj->fk_user_author).
",";
1303 if (
$db->query($sql)) {
1304 print $langs->trans(
'MigrationContractsLineCreation', $obj->cref).
"<br>\n";
1316 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1319 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1322 print $langs->trans(
'MigrationContractsNothingToUpdate').
"<br>\n";
1325 print $langs->trans(
'MigrationContractsFieldDontExist').
"<br>\n";
1342 print
'<tr><td colspan="4">';
1347 print
'<b>'.$langs->trans(
'MigrationBankTransfertsUpdate').
"</b><br>\n";
1349 $sql =
"SELECT ba.rowid as barowid, bb.rowid as bbrowid";
1350 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as bb, ".MAIN_DB_PREFIX.
"bank as ba";
1351 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu ON bu.fk_bank = ba.rowid";
1352 $sql .=
" WHERE ba.amount = -bb.amount AND ba.fk_account <> bb.fk_account";
1353 $sql .=
" AND ba.datev = bb.datev AND ba.datec = bb.datec";
1354 $sql .=
" AND bu.fk_bank IS NULL";
1355 $resql =
$db->query($sql);
1361 $num =
$db->num_rows($resql);
1364 print $langs->trans(
'MigrationBankTransfertsToUpdate', $num).
"<br>\n";
1368 $obj =
$db->fetch_object($resql);
1370 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"bank_url (";
1371 $sql .=
"fk_bank, url_id, url, label, type";
1373 $sql .=
" VALUES (";
1374 $sql .= ((int) $obj->barowid).
",".((int) $obj->bbrowid).
", '/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'";
1380 if (!
$db->query($sql)) {
1391 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1394 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1397 print $langs->trans(
'MigrationBankTransfertsNothingToUpdate').
"<br>\n";
1416 print
'<tr><td colspan="4">';
1419 print
'<b>'.$langs->trans(
'MigrationContractsEmptyDatesUpdate').
"</b><br>\n";
1421 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set date_contrat=tms where date_contrat is null";
1423 $resql =
$db->query($sql);
1427 if (
$db->affected_rows($resql) > 0) {
1428 print $langs->trans(
'MigrationContractsEmptyDatesUpdateSuccess').
"<br>\n";
1430 print $langs->trans(
'MigrationContractsEmptyDatesNothingToUpdate').
"<br>\n";
1433 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=tms where datec is null";
1435 $resql =
$db->query($sql);
1439 if (
$db->affected_rows($resql) > 0) {
1440 print $langs->trans(
'MigrationContractsEmptyCreationDatesUpdateSuccess').
"<br>\n";
1442 print $langs->trans(
'MigrationContractsEmptyCreationDatesNothingToUpdate').
"<br>\n";
1458 print
'<tr><td colspan="4">';
1463 print
'<b>'.$langs->trans(
'MigrationContractsInvalidDatesUpdate').
"</b><br>\n";
1465 $sql =
"SELECT c.rowid as cref, c.datec, c.date_contrat, MIN(cd.date_ouverture) as datemin";
1466 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c,";
1467 $sql .=
" ".MAIN_DB_PREFIX.
"contratdet as cd";
1468 $sql .=
" WHERE c.rowid=cd.fk_contrat AND cd.date_ouverture IS NOT NULL";
1469 $sql .=
" GROUP BY c.rowid, c.date_contrat";
1470 $resql =
$db->query($sql);
1476 $num =
$db->num_rows($resql);
1479 $nbcontratsmodifie = 0;
1483 $obj =
$db->fetch_object($resql);
1484 if ($obj->date_contrat > $obj->datemin) {
1485 $datemin =
$db->jdate($obj->datemin);
1487 print $langs->trans(
'MigrationContractsInvalidDateFix', $obj->cref, $obj->date_contrat, $obj->datemin).
"<br>\n";
1488 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1489 $sql .=
" SET date_contrat='".$db->idate($datemin).
"'";
1490 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1491 $resql2 =
$db->query($sql);
1496 $nbcontratsmodifie++;
1503 if ($nbcontratsmodifie) {
1504 print $langs->trans(
'MigrationContractsInvalidDatesNumber', $nbcontratsmodifie).
"<br>\n";
1506 print $langs->trans(
'MigrationContractsInvalidDatesNothingToUpdate').
"<br>\n";
1526 print
'<tr><td colspan="4">';
1529 print
'<b>'.$langs->trans(
'MigrationContractsIncoherentCreationDateUpdate').
"</b><br>\n";
1531 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=date_contrat where datec is null or datec > date_contrat";
1533 $resql =
$db->query($sql);
1537 if (
$db->affected_rows($resql) > 0) {
1538 print $langs->trans(
'MigrationContractsIncoherentCreationDateUpdateSuccess').
"<br>\n";
1540 print $langs->trans(
'MigrationContractsIncoherentCreationDateNothingToUpdate').
"<br>\n";
1556 print
'<tr><td colspan="4">';
1559 print
'<b>'.$langs->trans(
'MigrationReopeningContracts').
"</b><br>\n";
1561 $sql =
"SELECT c.rowid as cref FROM ".MAIN_DB_PREFIX.
"contrat as c, ".MAIN_DB_PREFIX.
"contratdet as cd";
1562 $sql .=
" WHERE cd.statut = 4 AND c.statut=2 AND c.rowid=cd.fk_contrat";
1564 $resql =
$db->query($sql);
1568 if (
$db->affected_rows($resql) > 0) {
1571 $num =
$db->num_rows($resql);
1574 $nbcontratsmodifie = 0;
1578 $obj =
$db->fetch_object($resql);
1580 print $langs->trans(
'MigrationReopenThisContract', $obj->cref).
"<br>\n";
1581 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1582 $sql .=
" SET statut = 1";
1583 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1584 $resql2 =
$db->query($sql);
1589 $nbcontratsmodifie++;
1596 if ($nbcontratsmodifie) {
1597 print $langs->trans(
'MigrationReopenedContractsNumber', $nbcontratsmodifie).
"<br>\n";
1599 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1603 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1621 print
'<tr><td colspan="4">';
1623 print
'<b>'.$langs->trans(
'SuppliersInvoices').
"</b><br>\n";
1626 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"paiementfourn",
"fk_facture_fourn");
1627 $obj =
$db->fetch_object($result);
1632 $select_sql =
'SELECT rowid, fk_facture_fourn, amount';
1633 $select_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn';
1634 $select_sql .=
' WHERE fk_facture_fourn IS NOT NULL';
1637 $select_resql =
$db->query($select_sql);
1638 if ($select_resql) {
1639 $select_num =
$db->num_rows($select_resql);
1643 while (($i < $select_num) && (!$error)) {
1644 $select_obj =
$db->fetch_object($select_resql);
1647 $check_sql =
'SELECT fk_paiementfourn, fk_facturefourn';
1648 $check_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn';
1649 $check_sql .=
' WHERE fk_paiementfourn = '.((int) $select_obj->rowid).
' AND fk_facturefourn = '.((int) $select_obj->fk_facture_fourn);
1650 $check_resql =
$db->query($check_sql);
1652 $check_num =
$db->num_rows($check_resql);
1653 if ($check_num == 0) {
1657 print
'<tr><td colspan="4" class="nowrap"><b>'.$langs->trans(
'SuppliersInvoices').
'</b></td></tr>';
1658 print
'<tr><td>fk_paiementfourn</td><td>fk_facturefourn</td><td>'.$langs->trans(
'Amount').
'</td><td> </td></tr>';
1661 print
'<tr class="oddeven">';
1662 print
'<td>'.$select_obj->rowid.
'</td><td>'.$select_obj->fk_facture_fourn.
'</td><td>'.$select_obj->amount.
'</td>';
1664 $insert_sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn SET ';
1665 $insert_sql .=
' fk_paiementfourn = \''.((int) $select_obj->rowid).
'\',
';
1666 $insert_sql .= ' fk_facturefourn = \
''.((int) $select_obj->fk_facture_fourn).
'\',
';
1667 $insert_sql .= ' amount = \
''.((float) $select_obj->amount).
'\'';
1668 $insert_resql =
$db->query($insert_sql);
1670 if ($insert_resql) {
1672 print
'<td><span class="ok">'.$langs->trans(
"OK").
'</span></td>';
1674 print
'<td><span class="error">Error on insert</span></td>';
1690 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1694 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiementfourn DROP COLUMN fk_facture_fourn";
1697 print
'<tr><td>'.$langs->trans(
"Error").
'</td></tr>';
1701 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1718 $tmpmysoc->setMysoc(
$conf);
1722 print
'<tr><td colspan="4">';
1725 print
'<b>'.$langs->trans(
'MigrationInvoice').
"</b><br>\n";
1728 $sql =
"SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as vatrate, fd.total_ttc, fd.info_bits,";
1729 $sql .=
" f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f";
1730 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facturedet as fd, ".MAIN_DB_PREFIX.
"facture as f";
1731 $sql .=
" WHERE fd.fk_facture = f.rowid";
1732 $sql .=
" AND (((fd.total_ttc = 0 AND fd.remise_percent != 100) or fd.total_ttc IS NULL) or f.total_ttc IS NULL)";
1736 $resql =
$db->query($sql);
1738 $num =
$db->num_rows($resql);
1742 $obj =
$db->fetch_object($resql);
1744 $rowid = $obj->rowid;
1746 $pu = $obj->subprice;
1747 $vatrate = $obj->vatrate;
1748 $remise_percent = $obj->remise_percent;
1749 $remise_percent_global = $obj->remise_percent_global;
1750 $total_ttc_f = $obj->total_ttc_f;
1751 $info_bits = $obj->info_bits;
1755 $facligne->fetch($rowid);
1757 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $facligne->product_type, $tmpmysoc);
1758 $total_ht = $result[0];
1759 $total_tva = $result[1];
1760 $total_ttc = $result[2];
1762 $facligne->total_ht = (float) $total_ht;
1763 $facligne->total_tva = (float) $total_tva;
1764 $facligne->total_ttc = (float) $total_ttc;
1766 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);
1768 $facligne->update_total();
1772 if (!$total_ttc_f) {
1774 $facture->id = $obj->facid;
1776 if ($facture->fetch($facture->id) >= 0) {
1777 if ($facture->update_price() > 0) {
1780 print
"Error id=".$facture->id;
1793 print $langs->trans(
"AlreadyDone");
1799 print
"Error #1 ".$db->error();
1821 $tmpmysoc->setMysoc(
$conf);
1825 print
'<tr><td colspan="4">';
1828 print
'<b>'.$langs->trans(
'MigrationProposal').
"</b><br>\n";
1831 $sql =
"SELECT pd.rowid, pd.qty, pd.subprice, pd.remise_percent, pd.tva_tx as vatrate, pd.info_bits,";
1832 $sql .=
" p.rowid as propalid, p.remise_percent as remise_percent_global";
1833 $sql .=
" FROM ".MAIN_DB_PREFIX.
"propaldet as pd, ".MAIN_DB_PREFIX.
"propal as p";
1834 $sql .=
" WHERE pd.fk_propal = p.rowid";
1835 $sql .=
" AND ((pd.total_ttc = 0 AND pd.remise_percent != 100) or pd.total_ttc IS NULL)";
1838 $resql =
$db->query($sql);
1840 $num =
$db->num_rows($resql);
1844 $obj =
$db->fetch_object($resql);
1846 $rowid = $obj->rowid;
1848 $pu = $obj->subprice;
1849 $vatrate = $obj->vatrate;
1850 $remise_percent = $obj->remise_percent;
1851 $remise_percent_global = $obj->remise_percent_global;
1852 $info_bits = $obj->info_bits;
1856 $propalligne->fetch($rowid);
1858 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $propalligne->product_type, $tmpmysoc);
1859 $total_ht = $result[0];
1860 $total_tva = $result[1];
1861 $total_ttc = $result[2];
1863 $propalligne->total_ht = (float) $total_ht;
1864 $propalligne->total_tva = (float) $total_tva;
1865 $propalligne->total_ttc = (float) $total_ttc;
1867 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);
1869 $propalligne->update_total();
1874 print $langs->trans(
"AlreadyDone");
1881 print
"Error #1 ".$db->error();
1904 $tmpmysoc->setMysoc(
$conf);
1905 if (empty($tmpmysoc->country_id)) {
1906 $tmpmysoc->country_id = 0;
1909 print
'<tr><td colspan="4">';
1912 print
'<b>'.$langs->trans(
'MigrationContract').
"</b><br>\n";
1915 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1916 $sql .=
" c.rowid as contratid";
1917 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd, ".MAIN_DB_PREFIX.
"contrat as c";
1918 $sql .=
" WHERE cd.fk_contrat = c.rowid";
1919 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100 AND cd.subprice > 0) or cd.total_ttc IS NULL)";
1922 $resql =
$db->query($sql);
1924 $num =
$db->num_rows($resql);
1928 $obj =
$db->fetch_object($resql);
1930 $rowid = $obj->rowid;
1932 $pu = $obj->subprice;
1933 $vatrate = $obj->vatrate;
1934 $remise_percent = $obj->remise_percent;
1935 $info_bits = $obj->info_bits;
1940 $contratligne->fetch($rowid);
1942 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, 0,
'HT', $info_bits, $contratligne->product_type, $tmpmysoc);
1943 $total_ht = $result[0];
1944 $total_tva = $result[1];
1945 $total_ttc = $result[2];
1947 $contratligne->total_ht = (float) $total_ht;
1948 $contratligne->total_tva = (float) $total_tva;
1949 $contratligne->total_ttc = (float) $total_ttc;
1951 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);
1953 $contratligne->update_total();
1958 print $langs->trans(
"AlreadyDone");
1965 print
"Error #1 ".$db->error();
1988 $tmpmysoc->setMysoc(
$conf);
1990 print
'<tr><td colspan="4">';
1993 print
'<b>'.$langs->trans(
'MigrationOrder').
"</b><br>\n";
1996 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1997 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1998 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"commande as c";
1999 $sql .=
" WHERE cd.fk_commande = c.rowid";
2000 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
2003 $resql =
$db->query($sql);
2005 $num =
$db->num_rows($resql);
2009 $obj =
$db->fetch_object($resql);
2011 $rowid = $obj->rowid;
2013 $pu = $obj->subprice;
2014 $vatrate = $obj->vatrate;
2015 $remise_percent = $obj->remise_percent;
2016 $remise_percent_global = $obj->remise_percent_global;
2017 $info_bits = $obj->info_bits;
2021 $commandeligne->fetch($rowid);
2023 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $tmpmysoc);
2024 $total_ht = $result[0];
2025 $total_tva = $result[1];
2026 $total_ttc = $result[2];
2028 $commandeligne->total_ht = (float) $total_ht;
2029 $commandeligne->total_tva = (float) $total_tva;
2030 $commandeligne->total_ttc = (float) $total_ttc;
2032 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);
2034 $commandeligne->update_total();
2039 print $langs->trans(
"AlreadyDone");
2056 print
"Error #1 ".$db->error();
2081 $tmpmysoc->setMysoc(
$conf);
2083 print
'<tr><td colspan="4">';
2086 print
'<b>'.$langs->trans(
'MigrationSupplierOrder').
"</b><br>\n";
2089 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
2090 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
2091 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cd, ".MAIN_DB_PREFIX.
"commande_fournisseur as c";
2092 $sql .=
" WHERE cd.fk_commande = c.rowid";
2093 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
2096 $resql =
$db->query($sql);
2098 $num =
$db->num_rows($resql);
2102 $obj =
$db->fetch_object($resql);
2104 $rowid = $obj->rowid;
2106 $pu = $obj->subprice;
2107 $vatrate = $obj->vatrate;
2108 $remise_percent = $obj->remise_percent;
2109 $remise_percent_global = $obj->remise_percent_global;
2110 $info_bits = $obj->info_bits;
2114 $commandeligne->fetch($rowid);
2116 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type,
$mysoc);
2117 $total_ht = $result[0];
2118 $total_tva = $result[1];
2119 $total_ttc = $result[2];
2121 $commandeligne->total_ht = (float) $total_ht;
2122 $commandeligne->total_tva = (float) $total_tva;
2123 $commandeligne->total_ttc = (float) $total_ttc;
2125 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);
2127 $commandeligne->update_total();
2132 print $langs->trans(
"AlreadyDone");
2149 print
"Error #1 ".$db->error();
2175 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
2177 if (count($modellist) == 0) {
2179 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('crabe','invoice')";
2180 $resql =
$db->query($sql);
2188 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
2190 if (count($modellist) == 0) {
2192 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('einstein','order')";
2193 $resql =
$db->query($sql);
2201 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
2203 if (count($modellist) == 0) {
2205 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('rouget','shipping')";
2206 $resql =
$db->query($sql);
2229 print
'<tr><td colspan="4">';
2232 print
'<b>'.$langs->trans(
'MigrationShipmentOrderMatching').
"</b><br>\n";
2234 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"fk_commande");
2235 $obj =
$db->fetch_object($result);
2241 $sql =
"SELECT e.rowid, e.fk_commande FROM ".MAIN_DB_PREFIX.
"expedition as e";
2242 $resql =
$db->query($sql);
2245 $num =
$db->num_rows($resql);
2249 $obj =
$db->fetch_object($resql);
2251 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_exp (fk_expedition,fk_commande)";
2252 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2253 $resql2 =
$db->query($sql);
2266 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition DROP COLUMN fk_commande";
2267 print $langs->trans(
'FieldRenamed').
"<br>\n";
2277 print $langs->trans(
'AlreadyDone').
"<br>\n";
2294 print
'<tr><td colspan="4">';
2297 print
'<b>'.$langs->trans(
'MigrationDeliveryOrderMatching').
"</b><br>\n";
2299 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_commande");
2300 $obj =
$db->fetch_object($result);
2306 $sql =
"SELECT l.rowid, l.fk_commande,";
2307 $sql .=
" c.ref_client, c.date_livraison as delivery_date";
2308 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l, ".MAIN_DB_PREFIX.
"commande as c";
2309 $sql .=
" WHERE c.rowid = l.fk_commande";
2310 $resql =
$db->query($sql);
2313 $num =
$db->num_rows($resql);
2317 $obj =
$db->fetch_object($resql);
2319 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_liv (fk_livraison,fk_commande)";
2320 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2321 $resql2 =
$db->query($sql);
2324 $delivery_date =
$db->jdate($obj->delivery_date);
2326 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2327 $sqlu .=
" ref_client = '".$db->escape($obj->ref_client).
"'";
2328 $sqlu .=
", date_livraison = '".$db->idate($delivery_date).
"'";
2329 $sqlu .=
" WHERE rowid = ".((int) $obj->rowid);
2330 $resql3 =
$db->query($sqlu);
2346 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_commande";
2347 print $langs->trans(
'FieldRenamed').
"<br>\n";
2357 print $langs->trans(
'AlreadyDone').
"<br>\n";
2374 print
'<tr><td colspan="4">';
2377 print
'<b>'.$langs->trans(
'MigrationDeliveryDetail').
"</b><br>\n";
2381 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_commande_ligne");
2382 $obj =
$db->fetch_object($result);
2388 $sql =
"SELECT cd.rowid, cd.fk_product, cd.description, cd.subprice, cd.total_ht";
2389 $sql .=
", ld.fk_livraison";
2390 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"livraisondet as ld";
2391 $sql .=
" WHERE ld.fk_commande_ligne = cd.rowid";
2392 $resql =
$db->query($sql);
2395 $num =
$db->num_rows($resql);
2399 $obj =
$db->fetch_object($resql);
2401 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"livraisondet SET";
2402 $sql .=
" fk_product = ".((int) $obj->fk_product);
2403 $sql .=
",description = '".$db->escape($obj->description).
"'";
2404 $sql .=
",subprice = ".price2num($obj->subprice);
2405 $sql .=
",total_ht = ".price2num($obj->total_ht);
2406 $sql .=
" WHERE fk_commande_ligne = ".((int) $obj->rowid);
2407 $resql2 =
$db->query($sql);
2410 $sql =
"SELECT total_ht";
2411 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
2412 $sql .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2413 $resql3 =
$db->query($sql);
2416 $obju =
$db->fetch_object($resql3);
2417 $total_ht = $obju->total_ht + $obj->total_ht;
2419 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2420 $sqlu .=
" total_ht = ".price2num($total_ht,
'MT');
2421 $sqlu .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2422 $resql4 =
$db->query($sqlu);
2442 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet CHANGE fk_commande_ligne fk_origin_line integer";
2443 print $langs->trans(
'FieldRenamed').
"<br>\n";
2453 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_origin_line");
2454 $obj =
$db->fetch_object($result);
2456 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet ADD COLUMN fk_origin_line integer after fk_livraison";
2459 print $langs->trans(
'AlreadyDone').
"<br>\n";
2476 print
'<tr><td colspan="4">';
2479 print
'<b>'.$langs->trans(
'MigrationStockDetail').
"</b><br>\n";
2485 $sql =
"SELECT SUM(reel) as total, fk_product";
2486 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_stock as ps";
2487 $sql .=
" GROUP BY fk_product";
2488 $resql =
$db->query($sql);
2491 $num =
$db->num_rows($resql);
2495 $obj =
$db->fetch_object($resql);
2497 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET";
2498 $sql .=
" stock = ".price2num($obj->total,
'MS');
2499 $sql .=
" WHERE rowid = ".((int) $obj->fk_product);
2501 $resql2 =
$db->query($sql);
2538 print
'<tr><td colspan="4">';
2541 print
'<b>'.$langs->trans(
'MigrationMenusDetail').
"</b><br>\n";
2545 if (
$db->DDLInfoTable(MAIN_DB_PREFIX.
"menu_constraint")) {
2548 $sql =
"SELECT m.rowid, mc.action";
2549 $sql .=
" FROM ".MAIN_DB_PREFIX.
"menu_constraint as mc, ".MAIN_DB_PREFIX.
"menu_const as md, ".MAIN_DB_PREFIX.
"menu as m";
2550 $sql .=
" WHERE md.fk_menu = m.rowid AND md.fk_constraint = mc.rowid";
2551 $sql .=
" AND m.enabled = '1'";
2552 $resql =
$db->query($sql);
2555 $num =
$db->num_rows($resql);
2558 $obj =
$db->fetch_object($resql);
2560 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"menu SET";
2561 $sql .=
" enabled = '".$db->escape($obj->action).
"'";
2562 $sql .=
" WHERE rowid = ".((int) $obj->rowid);
2563 $sql .=
" AND enabled = '1'";
2565 $resql2 =
$db->query($sql);
2586 print $langs->trans(
'AlreadyDone').
"<br>\n";
2605 print
'<tr><td colspan="4">';
2608 print
'<b>'.$langs->trans(
'MigrationDeliveryAddress').
"</b><br>\n";
2612 if (
$db->DDLInfoTable(MAIN_DB_PREFIX.
"co_exp")) {
2615 $sql =
"SELECT c.fk_adresse_livraison, ce.fk_expedition";
2616 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande as c";
2617 $sql .=
", ".MAIN_DB_PREFIX.
"co_exp as ce";
2618 $sql .=
" WHERE c.rowid = ce.fk_commande";
2619 $sql .=
" AND c.fk_adresse_livraison IS NOT NULL AND c.fk_adresse_livraison != 0";
2621 $resql =
$db->query($sql);
2624 $num =
$db->num_rows($resql);
2628 $obj =
$db->fetch_object($resql);
2630 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
2631 $sql .=
" fk_adresse_livraison = '".$db->escape($obj->fk_adresse_livraison).
"'";
2632 $sql .=
" WHERE rowid = ".((int) $obj->fk_expedition);
2634 $resql2 =
$db->query($sql);
2643 print $langs->trans(
'AlreadyDone').
"<br>\n";
2656 print $langs->trans(
'AlreadyDone').
"<br>\n";
2675 if ((
$db->type ==
'mysql' ||
$db->type ==
'mysqli')) {
2677 dolibarr_install_syslog(
"upgrade2::migrate_restore_missing_links Version of database too old to make this migrate action");
2681 print
'<tr><td colspan="4">';
2684 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (1)<br>\n";
2690 $table1 =
'facturedet';
2691 $field1 =
'fk_remise_except';
2692 $table2 =
'societe_remise_except';
2693 $field2 =
'fk_facture_line';
2697 $sql =
"SELECT t1.rowid, t1.".$db->sanitize($field1).
" as field";
2698 $sql .=
" FROM ".MAIN_DB_PREFIX.$db->sanitize($table1).
" as t1";
2699 $sql .=
" WHERE t1.".$db->sanitize($field1).
" IS NOT NULL AND t1.".
$db->sanitize($field1).
" NOT IN";
2700 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$db->sanitize($table2).
" as t2";
2701 $sql .=
" WHERE t1.rowid = t2.".$db->sanitize($field2).
")";
2704 $resql =
$db->query($sql);
2707 $num =
$db->num_rows($resql);
2711 $obj =
$db->fetch_object($resql);
2713 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2715 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2716 $sql .=
" ".$db->sanitize($field2).
" = '".
$db->escape($obj->rowid).
"'";
2717 $sql .=
" WHERE rowid = ".((int) $obj->field);
2719 $resql2 =
$db->query($sql);
2728 print $langs->trans(
'AlreadyDone').
"<br>\n";
2744 print
'<tr><td colspan="4">';
2747 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (2)<br>\n";
2750 $table2 =
'facturedet';
2751 $field2 =
'fk_remise_except';
2752 $table1 =
'societe_remise_except';
2753 $field1 =
'fk_facture_line';
2757 $sql =
"SELECT t1.rowid, t1.".$db->sanitize($field1).
" as field";
2758 $sql .=
" FROM ".MAIN_DB_PREFIX.$db->sanitize($table1).
" as t1";
2759 $sql .=
" WHERE t1.".$db->sanitize($field1).
" IS NOT NULL AND t1.".
$db->sanitize($field1).
" NOT IN";
2760 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$db->sanitize($table2).
" as t2";
2761 $sql .=
" WHERE t1.rowid = t2.".$db->sanitize($field2).
")";
2764 $resql =
$db->query($sql);
2767 $num =
$db->num_rows($resql);
2771 $obj =
$db->fetch_object($resql);
2773 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2775 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2776 $sql .=
" ".$db->sanitize($field2).
" = '".
$db->escape($obj->rowid).
"'";
2777 $sql .=
" WHERE rowid = ".((int) $obj->field);
2779 $resql2 =
$db->query($sql);
2788 print $langs->trans(
'AlreadyDone').
"<br>\n";
2803 return ($error ? -1 : 1);
2818 print
'<tr><td colspan="4">';
2821 print
'<b>'.$langs->trans(
'MigrationProjectUserResp').
"</b><br>\n";
2823 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"projet",
"fk_user_resp");
2824 $obj =
$db->fetch_object($result);
2830 $sql =
"SELECT rowid, fk_user_resp FROM ".MAIN_DB_PREFIX.
"projet";
2831 $resql =
$db->query($sql);
2834 $num =
$db->num_rows($resql);
2838 $obj =
$db->fetch_object($resql);
2840 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2841 $sql2 .=
"datecreate";
2842 $sql2 .=
", statut";
2843 $sql2 .=
", element_id";
2844 $sql2 .=
", fk_c_type_contact";
2845 $sql2 .=
", fk_socpeople";
2846 $sql2 .=
") VALUES (";
2847 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2849 $sql2 .=
", ".((int) $obj->rowid);
2851 $sql2 .=
", ".((int) $obj->fk_user_resp);
2854 if ($obj->fk_user_resp > 0) {
2855 $resql2 =
$db->query($sql2);
2868 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"projet DROP COLUMN fk_user_resp";
2869 if (
$db->query($sqlDrop)) {
2882 print $langs->trans(
'AlreadyDone').
"<br>\n";
2899 print
'<tr><td colspan="4">';
2902 print
'<b>'.$langs->trans(
'MigrationProjectTaskActors').
"</b><br>\n";
2904 if (
$db->DDLInfoTable(MAIN_DB_PREFIX.
"projet_task_actors")) {
2909 $sql =
"SELECT fk_projet_task as fk_project_task, fk_user FROM ".MAIN_DB_PREFIX.
"projet_task_actors";
2910 $resql =
$db->query($sql);
2913 $num =
$db->num_rows($resql);
2917 $obj =
$db->fetch_object($resql);
2919 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2920 $sql2 .=
"datecreate";
2921 $sql2 .=
", statut";
2922 $sql2 .=
", element_id";
2923 $sql2 .=
", fk_c_type_contact";
2924 $sql2 .=
", fk_socpeople";
2925 $sql2 .=
") VALUES (";
2926 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2928 $sql2 .=
", ".((int) $obj->fk_project_task);
2930 $sql2 .=
", ".((int) $obj->fk_user);
2933 $resql2 =
$db->query($sql2);
2945 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.
"projet_task_actors";
2946 if (
$db->query($sqlDrop)) {
2959 print $langs->trans(
'AlreadyDone').
"<br>\n";
2979 print
'<tr><td colspan="4">';
2982 print
'<b>'.$langs->trans(
'MigrationRelationshipTables', MAIN_DB_PREFIX.$table).
"</b><br>\n";
2986 if (
$db->DDLInfoTable(MAIN_DB_PREFIX.$table)) {
2991 $sqlSelect =
"SELECT ".$db->sanitize($fk_source).
", ".
$db->sanitize($fk_target);
2992 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.$table;
2994 $resql =
$db->query($sqlSelect);
2997 $num =
$db->num_rows($resql);
3001 $obj =
$db->fetch_object($resql);
3003 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
3004 $sqlInsert .=
"fk_source";
3005 $sqlInsert .=
", sourcetype";
3006 $sqlInsert .=
", fk_target";
3007 $sqlInsert .=
", targettype";
3008 $sqlInsert .=
") VALUES (";
3009 $sqlInsert .= ((int) $obj->$fk_source);
3010 $sqlInsert .=
", '".$db->escape($sourcetype).
"'";
3011 $sqlInsert .=
", ".((int) $obj->$fk_target);
3012 $sqlInsert .=
", '".$db->escape($targettype).
"'";
3015 $result =
$db->query($sqlInsert);
3024 print $langs->trans(
'AlreadyDone').
"<br>\n";
3028 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.$db->sanitize($table);
3029 if (
$db->query($sqlDrop)) {
3042 print $langs->trans(
'AlreadyDone').
"<br>\n";
3060 print
'<tr><td colspan="4">';
3063 print
'<b>'.$langs->trans(
'MigrationProjectTaskTime').
"</b><br>\n";
3069 $sql =
"SELECT rowid, fk_element, element_duration";
3070 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_time";
3071 $resql =
$db->query($sql);
3074 $num =
$db->num_rows($resql);
3077 $totaltime = array();
3081 $obj =
$db->fetch_object($resql);
3083 if ($obj->element_duration > 0) {
3086 list($hour, $min) = explode(
'.', $obj->element_duration);
3087 $hour = (int) $hour * 60 * 60;
3088 $min = (int) ((
float) (
'.'.$min)) * 3600;
3089 $newtime = $hour + $min;
3091 $sql2 =
"UPDATE ".MAIN_DB_PREFIX.
"element_time SET";
3092 $sql2 .=
" element_duration = ".((int) $newtime);
3093 $sql2 .=
" WHERE rowid = ".((int) $obj->rowid);
3095 $resql2 =
$db->query($sql2);
3102 if (!empty($totaltime[$obj->fk_element])) {
3103 $totaltime[$obj->fk_element] += $newtime;
3105 $totaltime[$obj->fk_element] = $newtime;
3108 if (!empty($totaltime[$obj->fk_element])) {
3109 $totaltime[$obj->fk_element] += $obj->element_duration;
3111 $totaltime[$obj->fk_element] = $obj->element_duration;
3120 foreach ($totaltime as $taskid => $total_duration) {
3121 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"projet_task SET";
3122 $sql .=
" duration_effective = ".((int) $total_duration);
3123 $sql .=
" WHERE rowid = ".((int) $taskid);
3125 $resql =
$db->query($sql);
3132 print $langs->trans(
'AlreadyDone').
"<br>\n";
3138 print $langs->trans(
'AlreadyDone').
"<br>\n";
3163 print
'<tr><td colspan="4">';
3166 print
'<b>'.$langs->trans(
'MigrationCustomerOrderShipping').
"</b><br>\n";
3170 $result1 =
$db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"ref_customer");
3171 $result2 =
$db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"date_delivery");
3172 $obj1 =
$db->fetch_object($result1);
3173 $obj2 =
$db->fetch_object($result2);
3174 if (!$obj1 && !$obj2) {
3179 $sqlAdd1 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN ref_customer varchar(30) AFTER entity";
3180 $sqlAdd2 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition";
3182 if (
$db->query($sqlAdd1) &&
$db->query($sqlAdd2)) {
3183 $sqlSelect =
"SELECT e.rowid as shipping_id, c.ref_client, c.date_livraison as delivery_date";
3184 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"expedition as e";
3185 $sqlSelect .=
", ".MAIN_DB_PREFIX.
"element_element as el";
3186 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"commande as c ON c.rowid = el.fk_source AND el.sourcetype = 'commande'";
3187 $sqlSelect .=
" WHERE e.rowid = el.fk_target";
3188 $sqlSelect .=
" AND el.targettype = 'shipping'";
3190 $resql =
$db->query($sqlSelect);
3193 $num =
$db->num_rows($resql);
3197 $obj =
$db->fetch_object($resql);
3199 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
3200 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_client).
"'";
3201 $sqlUpdate .=
", date_delivery = '".$db->escape($obj->delivery_date ? $obj->delivery_date :
'null').
"'";
3202 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->shipping_id);
3204 $result =
$db->query($sqlUpdate);
3213 print $langs->trans(
'AlreadyDone').
"<br>\n";
3231 print $langs->trans(
'AlreadyDone').
"<br>\n";
3247 print
'<tr><td colspan="4">';
3250 print
'<b>'.$langs->trans(
'MigrationShippingDelivery').
"</b><br>\n";
3254 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_expedition");
3255 $obj =
$db->fetch_object($result);
3261 $sqlSelect =
"SELECT rowid, fk_expedition";
3262 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
3263 $sqlSelect .=
" WHERE fk_expedition is not null";
3265 $resql =
$db->query($sqlSelect);
3268 $num =
$db->num_rows($resql);
3272 $obj =
$db->fetch_object($resql);
3274 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
3275 $sqlInsert .=
"fk_source";
3276 $sqlInsert .=
", sourcetype";
3277 $sqlInsert .=
", fk_target";
3278 $sqlInsert .=
", targettype";
3279 $sqlInsert .=
") VALUES (";
3280 $sqlInsert .= ((int) $obj->fk_expedition);
3281 $sqlInsert .=
", 'shipping'";
3282 $sqlInsert .=
", ".((int) $obj->rowid);
3283 $sqlInsert .=
", 'delivery'";
3286 $result =
$db->query($sqlInsert);
3288 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET fk_expedition = NULL";
3289 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3291 $result =
$db->query($sqlUpdate);
3304 print $langs->trans(
'AlreadyDone').
"<br>\n";
3308 $sqlDelete =
"DELETE FROM ".MAIN_DB_PREFIX.
"element_element WHERE sourcetype = 'commande' AND targettype = 'delivery'";
3309 $db->query($sqlDelete);
3314 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_expedition";
3315 $db->query($sqlDrop);
3325 print $langs->trans(
'AlreadyDone').
"<br>\n";
3342 print
'<tr><td colspan="4">';
3345 print
'<b>'.$langs->trans(
'MigrationShippingDelivery2').
"</b><br>\n";
3353 $sqlSelect =
"SELECT l.rowid as delivery_id, e.ref_customer, e.date_delivery";
3354 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l,";
3355 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"element_element as el,";
3356 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"expedition as e";
3357 $sqlSelect .=
" WHERE l.rowid = el.fk_target";
3358 $sqlSelect .=
" AND el.targettype = 'delivery'";
3359 $sqlSelect .=
" AND e.rowid = el.fk_source AND el.sourcetype = 'shipping'";
3360 $sqlSelect .=
" AND (e.ref_customer IS NOT NULL OR e.date_delivery IS NOT NULL)";
3362 $sqlSelect .=
" AND (l.ref_customer IS NULL".($db->type !=
'pgsql' ?
" or l.ref_customer = ''" :
"").
")";
3363 $sqlSelect .=
" AND (l.date_delivery IS NULL".($db->type !=
'pgsql' ?
" or l.date_delivery = ''" :
"").
")";
3365 $resql =
$db->query($sqlSelect);
3368 $num =
$db->num_rows($resql);
3372 $obj =
$db->fetch_object($resql);
3374 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
3375 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_customer).
"',";
3376 $sqlUpdate .=
" date_delivery = ".($obj->date_delivery ?
"'".$db->escape($obj->date_delivery).
"'" :
'null');
3377 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->delivery_id);
3379 $result =
$db->query($sqlUpdate);
3388 print $langs->trans(
'AlreadyDone').
"<br>\n";
3415 print
'<tr><td colspan="4">';
3418 print
'<b>'.$langs->trans(
'MigrationActioncommElement').
"</b><br>\n";
3421 'propal' =>
'propalrowid',
3422 'order' =>
'fk_commande',
3423 'invoice' =>
'fk_facture',
3424 'contract' =>
'fk_contract',
3425 'order_supplier' =>
'fk_supplier_order',
3426 'invoice_supplier' =>
'fk_supplier_invoice'
3429 foreach ($elements as $type => $field) {
3430 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"actioncomm", $field);
3431 $obj =
$db->fetch_object($result);
3437 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"actioncomm SET ";
3438 $sql .=
"fk_element = ".$db->sanitize($field).
", elementtype = '".
$db->escape($type).
"'";
3439 $sql .=
" WHERE ".$db->sanitize($field).
" IS NOT NULL";
3440 $sql .=
" AND fk_element IS NULL";
3441 $sql .=
" AND elementtype IS NULL";
3443 $resql =
$db->query($sql);
3457 print $langs->trans(
'AlreadyDone').
"<br>\n";
3474 print
'<tr><td colspan="4">';
3477 print
'<b>'.$langs->trans(
'MigrationPaymentMode').
"</b><br>\n";
3480 'old_id' => array(5, 8, 9, 10, 11),
3481 'new_id' => array(50, 51, 52, 53, 54),
3482 'code' => array(
'VAD',
'TRA',
'LCR',
'FAC',
'PRO'),
3483 'tables' => array(
'commande_fournisseur',
'commande',
'facture_rec',
'facture',
'propal')
3487 foreach ($elements[
'old_id'] as $key => $old_id) {
3492 $sqlSelect =
"SELECT id";
3493 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"c_paiement";
3494 $sqlSelect .=
" WHERE id = ".((int) $old_id);
3495 $sqlSelect .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3497 $resql =
$db->query($sqlSelect);
3499 $num =
$db->num_rows($resql);
3505 $sqla =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET";
3506 $sqla .=
" fk_paiement = ".((int) $elements[
'new_id'][$key]);
3507 $sqla .=
" WHERE fk_paiement = ".((int) $old_id);
3508 $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]).
"')";
3509 $resqla =
$db->query($sqla);
3511 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"c_paiement SET";
3512 $sql .=
" id = ".((int) $elements[
'new_id'][$key]);
3513 $sql .=
" WHERE id = ".((int) $old_id);
3514 $sql .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3515 $resql =
$db->query($sql);
3517 if ($resqla && $resql) {
3518 foreach ($elements[
'tables'] as $table) {
3519 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table).
" SET ";
3520 $sql .=
"fk_mode_reglement = ".((int) $elements[
'new_id'][$key]);
3521 $sql .=
" WHERE fk_mode_reglement = ".((int) $old_id);
3523 $resql =
$db->query($sql);
3546 print $langs->trans(
'AlreadyDone').
"<br>\n";
3564 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"categorie_association");
3566 $obj =
$db->fetch_object($result);
3569 $children = array();
3570 $sql =
"SELECT fk_categorie_mere, fk_categorie_fille";
3571 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3573 $resql =
$db->query($sql);
3575 $num =
$db->num_rows($resql);
3576 while ($obj =
$db->fetch_object($resql)) {
3577 if (!isset($children[$obj->fk_categorie_fille])) {
3578 if ($obj->fk_categorie_mere != $obj->fk_categorie_fille) {
3579 $children[$obj->fk_categorie_fille] = 1;
3580 $couples[$obj->fk_categorie_mere.
'_'.$obj->fk_categorie_fille] = array(
'mere' => $obj->fk_categorie_mere,
'fille' => $obj->fk_categorie_fille);
3588 if (count($couples) > 0 && $num > count($couples)) {
3594 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_association";
3596 $resqld =
$db->query($sql);
3599 foreach ($couples as $key => $val) {
3600 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_association(fk_categorie_mere,fk_categorie_fille)";
3601 $sql .=
" VALUES(".((int) $val[
'mere']).
", ".((int) $val[
'fille']).
")";
3603 $resqli =
$db->query($sql);
3611 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3612 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Success").
' ('.$num.
'=>'.count($couples).
')</td></tr>';
3615 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3616 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Failed").
'</td></tr>';
3621 print
'<tr><td>'.$langs->trans(
"Error").
'</td>';
3622 print
'<td class="right"><div class="error">'.$db->lasterror().
'</div></td></tr>';
3639 print
'<tr><td colspan="4">';
3642 print
'<b>'.$langs->trans(
'MigrationCategorieAssociation').
"</b><br>\n";
3646 if (
$db->DDLInfoTable(MAIN_DB_PREFIX.
"categorie_association")) {
3651 $sqlSelect =
"SELECT fk_categorie_mere, fk_categorie_fille";
3652 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3654 $resql =
$db->query($sqlSelect);
3657 $num =
$db->num_rows($resql);
3661 $obj =
$db->fetch_object($resql);
3663 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"categorie SET ";
3664 $sqlUpdate .=
"fk_parent = ".((int) $obj->fk_categorie_mere);
3665 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->fk_categorie_fille);
3667 $result =
$db->query($sqlUpdate);
3676 print $langs->trans(
'AlreadyDone').
"<br>\n";
3689 print $langs->trans(
'AlreadyDone').
"<br>\n";
3705 print
'<tr><td colspan="4">';
3708 print
'<b>'.$langs->trans(
'MigrationEvents').
"</b><br>\n";
3716 $sqlSelect =
"SELECT a.id, a.fk_user_action";
3717 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3718 $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";
3719 $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')";
3720 $sqlSelect .=
" ORDER BY a.id";
3723 $resql =
$db->query($sqlSelect);
3726 $num =
$db->num_rows($resql);
3730 $obj =
$db->fetch_object($resql);
3732 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3733 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'user', ".((int) $obj->fk_user_action).
")";
3735 $result =
$db->query($sqlUpdate);
3744 print $langs->trans(
'AlreadyDone').
"<br>\n";
3771 print
'<tr><td colspan="4">';
3774 print
'<b>'.$langs->trans(
'MigrationEventsContact').
"</b><br>\n";
3782 $sqlSelect =
"SELECT a.id, a.fk_contact";
3783 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3784 $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";
3785 $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')";
3786 $sqlSelect .=
" ORDER BY a.id";
3789 $resql =
$db->query($sqlSelect);
3792 $num =
$db->num_rows($resql);
3796 $obj =
$db->fetch_object($resql);
3798 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3799 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'socpeople', ".((int) $obj->fk_contact).
")";
3801 $result =
$db->query($sqlUpdate);
3810 print $langs->trans(
'AlreadyDone').
"<br>\n";
3840 require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
3842 print
'<tr><td colspan="4">';
3845 print
'<b>'.$langs->trans(
'MigrationResetBlockedLog').
"</b><br>\n";
3853 $sqlSelect =
"SELECT DISTINCT entity";
3854 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"blockedlog";
3858 $resql =
$db->query($sqlSelect);
3861 $num =
$db->num_rows($resql);
3865 $obj =
$db->fetch_object($resql);
3867 print
'Process entity '.$obj->entity;
3869 $sqlSearch =
"SELECT count(rowid) as nb FROM ".MAIN_DB_PREFIX.
"blockedlog WHERE action = 'MODULE_SET' and entity = ".((int) $obj->entity);
3870 $resqlSearch =
$db->query($sqlSearch);
3872 $objSearch =
$db->fetch_object($resqlSearch);
3874 if ($objSearch && $objSearch->nb == 0) {
3875 print
' - Record for entity must be reset...';
3877 $sqlUpdate =
"DELETE FROM ".MAIN_DB_PREFIX.
"blockedlog";
3878 $sqlUpdate .=
" WHERE entity = ".((int) $obj->entity);
3879 $resqlUpdate =
$db->query($sqlUpdate);
3880 if (!$resqlUpdate) {
3889 $object->entity = $obj->entity;
3893 $b->setObjectData(
$object,
'MODULE_SET', 0, $user, 0);
3895 $res = $b->create($user);
3901 print
' - '.$langs->trans(
'AlreadyDone').
'<br>';
3910 print $langs->trans(
'NothingToDo').
"<br>\n";
3937 print
'<tr><td colspan="4">';
3940 print
'<b>'.$langs->trans(
'MigrationRemiseEntity').
"</b><br>\n";
3948 $sqlSelect =
"SELECT sr.rowid, s.entity";
3949 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise as sr, ".MAIN_DB_PREFIX.
"societe as s";
3950 $sqlSelect .=
" WHERE sr.fk_soc = s.rowid and sr.entity != s.entity";
3954 $resql =
$db->query($sqlSelect);
3957 $num =
$db->num_rows($resql);
3961 $obj =
$db->fetch_object($resql);
3963 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise SET";
3964 $sqlUpdate .=
" entity = ".((int) $obj->entity);
3965 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3967 $result =
$db->query($sqlUpdate);
3977 print $langs->trans(
'AlreadyDone').
"<br>\n";
4003 print
'<tr><td colspan="4">';
4006 print
'<b>'.$langs->trans(
'MigrationRemiseExceptEntity').
"</b><br>\n";
4014 $sqlSelect =
"SELECT sr.rowid, sr.fk_soc, sr.fk_facture_source, sr.fk_facture, sr.fk_facture_line";
4015 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as sr";
4018 $resql =
$db->query($sqlSelect);
4021 $num =
$db->num_rows($resql);
4025 $obj =
$db->fetch_object($resql);
4027 if (!empty($obj->fk_facture_source) || !empty($obj->fk_facture)) {
4028 $fk_facture = (!empty($obj->fk_facture_source) ? $obj->fk_facture_source : $obj->fk_facture);
4030 $sqlSelect2 =
"SELECT f.entity";
4031 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f";
4032 $sqlSelect2 .=
" WHERE f.rowid = ".((int) $fk_facture);
4033 } elseif (!empty($obj->fk_facture_line)) {
4034 $sqlSelect2 =
"SELECT f.entity";
4035 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f, ".MAIN_DB_PREFIX.
"facturedet as fd";
4036 $sqlSelect2 .=
" WHERE fd.rowid = ".((int) $obj->fk_facture_line);
4037 $sqlSelect2 .=
" AND fd.fk_facture = f.rowid";
4039 $sqlSelect2 =
"SELECT s.entity";
4040 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
4041 $sqlSelect2 .=
" WHERE s.rowid = ".((int) $obj->fk_soc);
4044 $resql2 =
$db->query($sqlSelect2);
4046 if (
$db->num_rows($resql2) > 0) {
4047 $obj2 =
$db->fetch_object($resql2);
4049 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise_except SET";
4050 $sqlUpdate .=
" entity = ".((int) $obj2->entity);
4051 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
4053 $result =
$db->query($sqlUpdate);
4068 print $langs->trans(
'AlreadyDone').
"<br>\n";
4108 array(
'to' => array(
'produit',
'product_advance',
'read_supplier_prices'),
'from' => array(array(
'produit',
'lire',
''), array(
'produit',
'creer',
''))),
4109 array(
'to' => array(
'produit',
'product_advance',
'write_supplier_prices'),
'from' => array(array(
'produit',
'creer',
''))),
4110 array(
'to' => array(
'service',
'service_advance',
'read_supplier_prices'),
'from' => array(array(
'service',
'lire',
''))),
4116 foreach ($rules as $rule) {
4119 if ($targetid <= 0) {
4124 $sourceids = array();
4125 foreach ($rule[
'from'] as $from) {
4131 if (empty($sourceids)) {
4134 $sourcelist = implode(
',', $sourceids);
4137 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"usergroup_rights (entity, fk_usergroup, fk_id)";
4138 $sql .=
" SELECT DISTINCT gr.entity, gr.fk_usergroup, ".((int) $targetid);
4139 $sql .=
" FROM ".MAIN_DB_PREFIX.
"usergroup_rights as gr";
4140 $sql .=
" WHERE gr.fk_id IN (".$db->sanitize($sourcelist).
")";
4141 $sql .=
" AND NOT EXISTS (SELECT 1 FROM ".MAIN_DB_PREFIX.
"usergroup_rights as ex WHERE ex.fk_usergroup = gr.fk_usergroup AND ex.entity = gr.entity AND ex.fk_id = ".((int) $targetid).
")";
4142 if (!
$db->query($sql)) {
4148 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"user_rights (entity, fk_user, fk_id)";
4149 $sql .=
" SELECT DISTINCT ur.entity, ur.fk_user, ".((int) $targetid);
4150 $sql .=
" FROM ".MAIN_DB_PREFIX.
"user_rights as ur";
4151 $sql .=
" WHERE ur.fk_id IN (".$db->sanitize($sourcelist).
")";
4152 $sql .=
" AND NOT EXISTS (SELECT 1 FROM ".MAIN_DB_PREFIX.
"user_rights as ex WHERE ex.fk_user = ur.fk_user AND ex.entity = ur.entity AND ex.fk_id = ".((int) $targetid).
")";
4153 if (!
$db->query($sql)) {
4178 $sql =
"SELECT id FROM ".MAIN_DB_PREFIX.
"rights_def";
4179 $sql .=
" WHERE module = '".$db->escape($module).
"'";
4180 $sql .=
" AND perms = '".$db->escape($perms).
"'";
4181 if ($subperms ===
'') {
4182 $sql .=
" AND (subperms IS NULL OR subperms = '')";
4184 $sql .=
" AND subperms = '".$db->escape($subperms).
"'";
4186 $resql =
$db->query($sql);
4190 $obj =
$db->fetch_object($resql);
4191 return $obj ? (int) $obj->id : 0;
4204 print
'<tr><td colspan="4">';
4206 print
'<b>'.$langs->trans(
'MigrationUserRightsEntity').
"</b><br>\n";
4214 $sqlSelect =
"SELECT u.rowid, u.entity";
4215 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"user as u";
4216 $sqlSelect .=
" WHERE u.entity > 1";
4219 $resql =
$db->query($sqlSelect);
4222 $num =
$db->num_rows($resql);
4226 $obj =
$db->fetch_object($resql);
4228 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"user_rights SET";
4229 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4230 $sqlUpdate .=
" WHERE fk_user = ".((int) $obj->rowid);
4232 $result =
$db->query($sqlUpdate);
4242 print $langs->trans(
'AlreadyDone').
"<br>\n";
4269 print
'<tr><td colspan="4">';
4271 print
'<b>'.$langs->trans(
'MigrationUserGroupRightsEntity').
"</b><br>\n";
4279 $sqlSelect =
"SELECT u.rowid, u.entity";
4280 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"usergroup as u";
4281 $sqlSelect .=
" WHERE u.entity > 1";
4284 $resql =
$db->query($sqlSelect);
4287 $num =
$db->num_rows($resql);
4291 $obj =
$db->fetch_object($resql);
4293 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"usergroup_rights SET";
4294 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4295 $sqlUpdate .=
" WHERE fk_usergroup = ".((int) $obj->rowid);
4297 $result =
$db->query($sqlUpdate);
4307 print $langs->trans(
'AlreadyDone').
"<br>\n";
4338 if (is_dir(DOL_DATA_ROOT.$oldname) && !file_exists(DOL_DATA_ROOT.$newname)) {
4339 dolibarr_install_syslog(
"upgrade2::migrate_rename_directories move ".DOL_DATA_ROOT.$oldname.
' into '.DOL_DATA_ROOT.$newname);
4340 @rename(DOL_DATA_ROOT.$oldname, DOL_DATA_ROOT.$newname);
4343 dolCopyDir(DOL_DATA_ROOT.$oldname, DOL_DATA_ROOT.$newname,
'0', 1);
4363 $filetodeletearray = array(
4364 '/core/ajax/ajaxcompanies.php',
4365 '/core/triggers/interface_demo.class.php',
4366 '/core/menus/barre_left/default.php',
4367 '/core/menus/barre_top/default.php',
4368 '/core/modules/modComptabiliteExpert.class.php',
4369 '/core/modules/modCommercial.class.php',
4370 '/core/modules/modPaybox.class.php',
4371 '/core/modules/modProduit.class.php',
4372 '/core/modules/modSkype.class.php',
4373 '/core/modules/modactivite.class.php',
4374 '/core/triggers/interface_modWebcalendar_Webcalsynchro.class.php',
4375 '/core/triggers/interface_modCommande_Ecotax.class.php',
4376 '/core/triggers/interface_modCommande_fraisport.class.php',
4377 '/core/triggers/interface_modPropale_PropalWorkflow.class.php',
4378 '/core/triggers/interface_50_modBlockedlog_ActionsBlockedLog.class.php',
4379 '/core/triggers/interface_99_modWebhook_WebhookTriggers.class.php',
4380 '/core/triggers/interface_99_modZapier_ZapierTriggers.class.php',
4381 '/core/menus/smartphone/iphone.lib.php',
4382 '/core/menus/smartphone/iphone_backoffice.php',
4383 '/core/menus/smartphone/iphone_frontoffice.php',
4384 '/core/menus/standard/auguria_backoffice.php',
4385 '/core/menus/standard/auguria_frontoffice.php',
4386 '/core/menus/standard/eldy_backoffice.php',
4387 '/core/menus/standard/eldy_frontoffice.php',
4388 '/core/modules/export/export_excel.modules.php',
4389 '/core/modules/export/export_csv.modules.php',
4390 '/core/modules/export/exportcsv.modules.php',
4391 '/core/modules/export/export_excel2007new.modules.php',
4392 '/core/modules/facture/pdf_crabe.modules.php',
4393 '/core/modules/facture/pdf_oursin.modules.php',
4394 '/core/modules/mailings/contacts2.modules.php',
4395 '/core/modules/mailings/contacts3.modules.php',
4396 '/core/modules/mailings/contacts4.modules.php',
4397 '/core/modules/mailings/framboise.modules.php',
4398 '/core/modules/mailings/dolibarr_services_expired.modules.php',
4399 '/core/modules/mailings/peche.modules.php',
4400 '/core/modules/mailings/poire.modules.php',
4401 '/core/modules/mailings/kiwi.modules.php',
4402 '/core/modules/syslog/mod_syslog_chromephp.php',
4403 '/core/modules/syslog/mod_syslog_firephp.php',
4404 '/core/modules/syslog/logHandlerInterface.php',
4405 '/core/boxes/box_members.php',
4407 '/includes/restler/framework/Luracast/Restler/Data/Object.php',
4408 '/includes/nusoap/lib/class.*',
4409 '/phenix/inc/triggers/interface_modPhenix_Phenixsynchro.class.php',
4410 '/webcalendar/inc/triggers/interface_modWebcalendar_webcalsynchro.class.php',
4412 '/api/class/api_generic.class.php',
4413 '/asterisk/cidlookup.php',
4414 '/categories/class/api_category.class.php',
4415 '/categories/class/api_deprecated_category.class.php',
4416 '/compta/facture/class/api_invoice.class.php',
4417 '/commande/class/api_commande.class.php',
4418 '/partnership/class/api_partnership.class.php',
4419 '/product/class/api_product.class.php',
4420 '/recruitment/class/api_recruitment.class.php',
4421 '/societe/class/api_contact.class.php',
4422 '/societe/class/api_thirdparty.class.php',
4423 '/support/online.php',
4424 '/takepos/class/actions_takepos.class.php',
4425 '/user/class/api_user.class.php',
4427 '/install/mysql/tables/llx_c_ticketsup_category.key.sql',
4428 '/install/mysql/tables/llx_c_ticketsup_category.sql',
4429 '/install/mysql/tables/llx_c_ticketsup_severity.key.sql',
4430 '/install/mysql/tables/llx_c_ticketsup_severity.sql',
4431 '/install/mysql/tables/llx_c_ticketsup_type.key.sql',
4432 '/install/mysql/tables/llx_c_ticketsup_type.sql'
4441 foreach ($filetodeletearray as $filetodelete) {
4443 if (preg_match(
'/\*/', $filetodelete) || file_exists(DOL_DOCUMENT_ROOT.$filetodelete)) {
4445 $result =
dol_delete_file(DOL_DOCUMENT_ROOT.$filetodelete, 0, (preg_match(
'/\*/', $filetodelete) ? 1 : 0), 0,
null,
true, 0);
4447 $langs->load(
"errors");
4448 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteFile", DOL_DOCUMENT_ROOT.$filetodelete);
4449 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4474 $filetodeletearray = array(
4475 DOL_DOCUMENT_ROOT.
'/core/modules/facture/terre',
4476 DOL_DOCUMENT_ROOT.
'/core/modules/facture/mercure',
4480 if (!empty($_SERVER[
"WINDIR"])) {
4481 $filetodeletearray[] = DOL_DOCUMENT_ROOT.
'/includes/phpoffice/PhpSpreadsheet';
4484 foreach ($filetodeletearray as $filetodelete) {
4486 if (file_exists($filetodelete)) {
4490 $langs->load(
"errors");
4491 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteDir", $filetodelete);
4492 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4516 if (count($listofmodule) == 0) {
4520 if (!is_object($user)) {
4521 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4525 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules force=".$force.
", listofmodule=".implode(
',', array_keys($listofmodule)), LOG_NOTICE);
4527 $reloadactionformodules = array(
4528 'MAIN_MODULE_AGENDA' => array(
'class' =>
'modAgenda',
'remove' => 1),
4529 'MAIN_MODULE_API' => array(
'class' =>
'modApi'),
4530 'MAIN_MODULE_BARCODE' => array(
'class' =>
'modBarcode',
'remove' => 1),
4531 'MAIN_MODULE_BLOCKEDLOG' => array(
'class' =>
'modBlockedLog',
'deleteinsertmenus' => 1),
4532 'MAIN_MODULE_CRON' => array(
'class' =>
'modCron',
'remove' => 1),
4533 'MAIN_MODULE_SOCIETE' => array(
'class' =>
'modSociete',
'remove' => 1),
4534 'MAIN_MODULE_PRODUIT' => array(
'class' =>
'modProduct'),
4535 'MAIN_MODULE_SERVICE' => array(
'class' =>
'modService'),
4536 'MAIN_MODULE_COMMANDE' => array(
'class' =>
'modCommande'),
4537 'MAIN_MODULE_DON' => array(
'class' =>
'modDon'),
4538 'MAIN_MODULE_FACTURE' => array(
'class' =>
'modFacture'),
4539 'MAIN_MODULE_FICHEINTER' => array(
'class' =>
'modFicheinter'),
4540 'MAIN_MODULE_FOURNISSEUR' => array(
'class' =>
'modFournisseur'),
4541 'MAIN_MODULE_EXPEDITION' => array(
'class' =>
'modExpedition'),
4542 'MAIN_MODULE_EXPENSEREPORT' => array(
'class' =>
'modExpenseReport'),
4543 'MAIN_MODULE_EVENTORGANIZATION' => array(
'class' =>
'modEventOrganization',
'remove' => 1),
4544 'MAIN_MODULE_ECM' => array(
'class' =>
'modECM',
'remove' => 1),
4545 'MAIN_MODULE_HOLIDAY' => array(
'class' =>
'modHoliday',
'remove' => 1),
4546 'MAIN_MODULE_KNOWLEDGEMANAGEMENT' => array(
'class' =>
'modKnowledgeManagement',
'remove' => 1),
4547 'MAIN_MODULE_LOAN' => array(
'class' =>
'modLoan',
'remove' => 1),
4548 'MAIN_MODULE_PROPAL' => array(
'class' =>
'modPropale'),
4549 'MAIN_MODULE_SUPPLIERPROPOSAL' => array(
'class' =>
'modSupplierProposal',
'remove' => 1),
4550 'MAIN_MODULE_OPENSURVEY' => array(
'class' =>
'modOpenSurvey',
'remove' => 1),
4551 'MAIN_MODULE_PRODUCTBATCH' => array(
'class' =>
'modProductBatch',
'remove' => 1),
4552 'MAIN_MODULE_TAKEPOS' => array(
'class' =>
'modTakePos',
'remove' => 1),
4553 'MAIN_MODULE_VARIANTS' => array(
'class' =>
'modVariants',
'remove' => 1),
4554 'MAIN_MODULE_EMAILCOLLECTOR' => array(
'class' =>
'modEmailCollector',
'remove' => 1),
4557 foreach ($listofmodule as $moduletoreload => $reloadmode) {
4558 $modulekey = preg_replace(
'/^MAIN_MODULE_/',
'', $moduletoreload);
4560 if (empty($moduletoreload) || (!
isModEnabled(strtolower($modulekey)) && !$force)) {
4566 if (!empty($reloadactionformodules[$moduletoreload])) {
4567 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreload.
" with mode ".$reloadmode);
4569 $val = $reloadactionformodules[$moduletoreload];
4570 $classformodule = $val[
'class'];
4571 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/'.$classformodule.
'.class.php';
4573 $mod =
new $classformodule(
$db);
4574 if (!empty($val[
'remove'])) {
4575 $mod->remove(
'noboxes');
4577 if (!empty($val[
'deleteinsertmenus'])) {
4579 $mod->delete_menus();
4580 $mod->insert_menus();
4582 $mod->init($reloadmode);
4587 preg_match(
'/([a-zA-Z0-9]+)/', $modulekey, $reg);
4588 if (!empty($reg[1])) {
4589 if (strtoupper($moduletoreload) == $moduletoreload) {
4590 $moduletoreloadshort = ucfirst(strtolower($reg[1]));
4592 $moduletoreloadshort = $reg[1];
4595 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreloadshort.
" with mode ".$reloadmode.
" (generic code)", LOG_NOTICE);
4597 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php';
4599 $classname =
'mod'.$moduletoreloadshort;
4600 $mod =
new $classname(
$db);
4601 '@phan-var-force DolibarrModules $mod';
4604 $mod->delete_menus();
4605 $mod->init($reloadmode);
4607 dolibarr_install_syslog(
'Failed to include '.DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4609 $res = @
dol_include_once(strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4611 $classname =
'mod'.$moduletoreloadshort;
4612 $mod =
new $classname(
$db);
4613 '@phan-var-force DolibarrModules $mod';
4614 $mod->init($reloadmode);
4616 dolibarr_install_syslog(
'Failed to include '.strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4617 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4623 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4628 if (!empty($mod) && is_object($mod)) {
4629 print
'<tr class="trforrunsql"><td colspan="4">';
4630 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: ';
4631 print $langs->trans(
'MigrationReloadModule').
' '.$mod->getName();
4632 print
"<!-- (".$reloadmode.
") -->";
4657 $listofmenuhandler = array();
4660 $listofmenuhandler[
'auguria'] = 1;
4663 foreach ($listofmenuhandler as $key => $val) {
4664 print
'<tr class="trforrunsql"><td colspan="4">';
4668 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: '.$langs->trans(
'MenuHandler').
" ".$key.
"<br>\n";
4671 $dir = DOL_DOCUMENT_ROOT.
"/core/menus/";
4672 $file =
'init_menu_'.$key.
'.sql';
4673 if (file_exists($dir.$file)) {
4674 $result =
run_sql($dir.$file, 1, 0, 1, $key);
4692 if (!is_object($user)) {
4693 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4697 print
'<tr><td colspan="4">';
4699 print
'<b>'.$langs->trans(
'MigrationProductLotPath').
"</b><br>\n";
4701 $sql =
"SELECT rowid, entity, batch, fk_product from ".MAIN_DB_PREFIX.
"product_lot";
4702 $resql =
$db->query($sql);
4705 $modulepart =
"product_batch";
4709 while ($obj =
$db->fetch_object($resql)) {
4710 $entity = (empty($obj->entity) ? 1 : $obj->entity);
4712 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/'.
$conf->productbatch->multidir_output[$entity];
4714 $dir =
$conf->productbatch->multidir_output[$entity];
4718 $lot->id = (int) $obj->rowid;
4719 $lot->ref = (
string) $obj->rowid;
4720 $lot->batch = $obj->batch;
4721 $lot->entity = $obj->entity;
4722 $lot->fk_product = $obj->fk_product;
4724 $savref = $lot->ref;
4726 $lot->ref = $obj->batch;
4727 $origin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4729 $lot->ref = $savref;
4730 $destin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4754 print
'<tr><td colspan="4">';
4756 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4758 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4760 if (!is_object($user)) {
4764 $sql =
"SELECT rowid as uid, entity from ".MAIN_DB_PREFIX.
"user";
4765 $resql =
$db->query($sql);
4767 while ($obj =
$db->fetch_object($resql)) {
4769 $fuser->id = $obj->uid;
4770 $fuser->entity = $obj->entity;
4773 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4775 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4777 $dir =
$conf->user->multidir_output[$entity];
4782 $origin = $dir.
'/'.
get_exdir($fuser->id, 2, 0, 1, $fuser,
'user');
4783 $destin = $dir.
'/'.$fuser->id;
4791 $handle = opendir($origin_osencoded);
4792 if (is_resource($handle)) {
4793 while (($file = readdir($handle)) !==
false) {
4794 if ($file ==
'.' || $file ==
'..') {
4799 $thumbs = opendir($origin_osencoded.
'/'.$file);
4800 if (is_resource($thumbs)) {
4802 while (($thumb = readdir($thumbs)) !==
false) {
4804 if ($thumb ==
'.' || $thumb ==
'..') {
4810 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4820 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4841 global
$db, $langs, $user;
4843 print
'<tr><td colspan="4">';
4845 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4847 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4849 if (!is_object($user)) {
4853 $sql =
"SELECT rowid as uid, entity, photo from ".MAIN_DB_PREFIX.
"user";
4854 $resql =
$db->query($sql);
4856 while ($obj =
$db->fetch_object($resql)) {
4858 $fuser->id = $obj->uid;
4859 $fuser->entity = $obj->entity;
4860 $fuser->photo = $obj->photo;
4863 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4865 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4867 $dir = DOL_DATA_ROOT.
'/users';
4872 $origin = $dir.
'/'.$fuser->id;
4873 $destin = $dir.
'/'.$fuser->id.
'/photos';
4881 $handle = opendir($origin_osencoded);
4882 if (is_resource($handle)) {
4883 while (($file = readdir($handle)) !==
false) {
4884 if ($file ==
'.' || $file ==
'..' || $file ==
'photos') {
4887 if (!empty($fuser->photo) && ($file != $fuser->photo && $file !=
'thumbs')) {
4892 $thumbs = opendir($origin_osencoded.
'/'.$file);
4893 if (is_resource($thumbs)) {
4895 while (($thumb = readdir($thumbs)) !==
false) {
4897 if ($thumb ==
'.' || $thumb ==
'..') {
4903 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4912 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4936 print
'<tr class="trforrunsql"><td>';
4938 print
'<b>'.$langs->trans(
'MigrationHolidayPath').
"</b><br>\n";
4940 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
4943 $sql =
"SELECT rowid as uid, ref, entity from ".MAIN_DB_PREFIX.
"holiday";
4945 $resql =
$db->query($sql);
4947 while ($obj =
$db->fetch_object($resql)) {
4949 $holiday->id = $obj->uid;
4950 $holiday->ref = $obj->ref;
4951 $holiday->entity = $obj->entity;
4954 $entity = (empty($holiday->entity) ? 1 : $holiday->entity);
4956 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/holiday';
4958 $dir =
$conf->holiday->multidir_output[$entity];
4963 $origin = $dir.
'/'.
get_exdir($holiday->id, 2, 0, 1, $holiday,
'holiday');
4964 $destin = $dir.
'/'.$holiday->ref;
4972 $handle = opendir($origin_osencoded);
4973 if (is_resource($handle)) {
4974 while (($file = readdir($handle)) !==
false) {
4975 if ($file ==
'.' || $file ==
'..') {
4980 $thumbs = opendir($origin_osencoded.
'/'.$file);
4981 if (is_resource($thumbs)) {
4983 while (($thumb = readdir($thumbs)) !==
false) {
4985 if ($thumb ==
'.' || $thumb ==
'..') {
4991 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
5001 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
5038 print
'<tr><td colspan="4">';
5039 $sql =
'SELECT rowid, socialnetworks';
5040 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'user WHERE';
5041 $sql .=
" skype IS NOT NULL OR skype <> ''";
5042 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5043 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5044 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5045 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5046 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5047 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5048 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5049 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5051 $resql =
$db->query($sql);
5053 while ($obj =
$db->fetch_object($resql)) {
5054 $arraysocialnetworks = array();
5055 if (!empty($obj->skype)) {
5056 $arraysocialnetworks[
'skype'] = $obj->skype;
5058 if (!empty($obj->twitter)) {
5059 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5061 if (!empty($obj->facebook)) {
5062 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5064 if (!empty($obj->linkedin)) {
5065 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5067 if (!empty($obj->instagram)) {
5068 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5070 if (!empty($obj->snapchat)) {
5071 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5073 if (!empty($obj->googleplus)) {
5074 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5076 if (!empty($obj->youtube)) {
5077 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5079 if (!empty($obj->whatsapp)) {
5080 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5082 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5083 $obj->socialnetworks =
'[]';
5085 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5086 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"user SET socialnetworks='".
$db->escape(json_encode($socialnetworks)).
"'";
5087 $sqlupd .=
', skype=null';
5088 $sqlupd .=
', twitter=null';
5089 $sqlupd .=
', facebook=null';
5090 $sqlupd .=
', linkedin=null';
5091 $sqlupd .=
', instagram=null';
5092 $sqlupd .=
', snapchat=null';
5093 $sqlupd .=
', googleplus=null';
5094 $sqlupd .=
', youtube=null';
5095 $sqlupd .=
', whatsapp=null';
5096 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5098 $resqlupd =
$db->query($sqlupd);
5113 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Users').
"</b><br>\n";
5127 print
'<tr><td colspan="4">';
5130 print
'<tr><td colspan="4">';
5131 $sql =
'SELECT rowid, socialnetworks';
5132 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'adherent WHERE ';
5133 $sql .=
" skype IS NOT NULL OR skype <> ''";
5134 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5135 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5136 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5137 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5138 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5139 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5140 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5141 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5143 $resql =
$db->query($sql);
5145 while ($obj =
$db->fetch_object($resql)) {
5146 $arraysocialnetworks = array();
5147 if (!empty($obj->skype)) {
5148 $arraysocialnetworks[
'skype'] = $obj->skype;
5150 if (!empty($obj->twitter)) {
5151 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5153 if (!empty($obj->facebook)) {
5154 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5156 if (!empty($obj->linkedin)) {
5157 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5159 if (!empty($obj->instagram)) {
5160 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5162 if (!empty($obj->snapchat)) {
5163 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5165 if (!empty($obj->googleplus)) {
5166 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5168 if (!empty($obj->youtube)) {
5169 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5171 if (!empty($obj->whatsapp)) {
5172 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5174 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5175 $obj->socialnetworks =
'[]';
5177 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5178 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"adherent SET socialnetworks='".
$db->escape(json_encode($socialnetworks)).
"'";
5179 $sqlupd .=
', skype=null';
5180 $sqlupd .=
', twitter=null';
5181 $sqlupd .=
', facebook=null';
5182 $sqlupd .=
', linkedin=null';
5183 $sqlupd .=
', instagram=null';
5184 $sqlupd .=
', snapchat=null';
5185 $sqlupd .=
', googleplus=null';
5186 $sqlupd .=
', youtube=null';
5187 $sqlupd .=
', whatsapp=null';
5188 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5190 $resqlupd =
$db->query($sqlupd);
5205 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Members').
"</b><br>\n";
5221 print
'<tr><td colspan="4">';
5222 $sql =
'SELECT rowid, socialnetworks';
5223 $sql .=
', jabberid, skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'socpeople WHERE';
5224 $sql .=
" jabberid IS NOT NULL OR jabberid <> ''";
5225 $sql .=
" OR skype IS NOT NULL OR skype <> ''";
5226 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5227 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5228 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5229 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5230 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5231 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5232 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5233 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5235 $resql =
$db->query($sql);
5237 while ($obj =
$db->fetch_object($resql)) {
5238 $arraysocialnetworks = array();
5239 if (!empty($obj->jabberid)) {
5240 $arraysocialnetworks[
'jabber'] = $obj->jabberid;
5242 if (!empty($obj->skype)) {
5243 $arraysocialnetworks[
'skype'] = $obj->skype;
5245 if (!empty($obj->twitter)) {
5246 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5248 if (!empty($obj->facebook)) {
5249 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5251 if (!empty($obj->linkedin)) {
5252 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5254 if (!empty($obj->instagram)) {
5255 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5257 if (!empty($obj->snapchat)) {
5258 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5260 if (!empty($obj->googleplus)) {
5261 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5263 if (!empty($obj->youtube)) {
5264 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5266 if (!empty($obj->whatsapp)) {
5267 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5269 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5270 $obj->socialnetworks =
'[]';
5272 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5273 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"socpeople SET socialnetworks='".
$db->escape(json_encode($socialnetworks)).
"'";
5274 $sqlupd .=
', jabberid=null';
5275 $sqlupd .=
', skype=null';
5276 $sqlupd .=
', twitter=null';
5277 $sqlupd .=
', facebook=null';
5278 $sqlupd .=
', linkedin=null';
5279 $sqlupd .=
', instagram=null';
5280 $sqlupd .=
', snapchat=null';
5281 $sqlupd .=
', googleplus=null';
5282 $sqlupd .=
', youtube=null';
5283 $sqlupd .=
', whatsapp=null';
5284 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5286 $resqlupd =
$db->query($sqlupd);
5301 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Contacts').
"</b><br>\n";
5317 print
'<tr><td colspan="4">';
5318 $sql =
'SELECT rowid, socialnetworks';
5319 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'societe WHERE ';
5320 $sql .=
" skype IS NOT NULL OR skype <> ''";
5321 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5322 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5323 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5324 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5325 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5326 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5327 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5328 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5330 $resql =
$db->query($sql);
5332 while ($obj =
$db->fetch_object($resql)) {
5333 $arraysocialnetworks = array();
5334 if (!empty($obj->skype)) {
5335 $arraysocialnetworks[
'skype'] = $obj->skype;
5337 if (!empty($obj->twitter)) {
5338 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5340 if (!empty($obj->facebook)) {
5341 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5343 if (!empty($obj->linkedin)) {
5344 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5346 if (!empty($obj->instagram)) {
5347 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5349 if (!empty($obj->snapchat)) {
5350 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5352 if (!empty($obj->googleplus)) {
5353 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5355 if (!empty($obj->youtube)) {
5356 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5358 if (!empty($obj->whatsapp)) {
5359 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5361 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5362 $obj->socialnetworks =
'[]';
5364 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5365 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"societe SET socialnetworks='".
$db->escape(json_encode($socialnetworks)).
"'";
5366 $sqlupd .=
', skype=null';
5367 $sqlupd .=
', twitter=null';
5368 $sqlupd .=
', facebook=null';
5369 $sqlupd .=
', linkedin=null';
5370 $sqlupd .=
', instagram=null';
5371 $sqlupd .=
', snapchat=null';
5372 $sqlupd .=
', googleplus=null';
5373 $sqlupd .=
', youtube=null';
5374 $sqlupd .=
', whatsapp=null';
5375 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5377 $resqlupd =
$db->query($sqlupd);
5392 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Thirdparties').
"</b><br>\n";
5412 print
'<tr class="trforrunsql"><td colspan="4">';
5413 $sql =
'SELECT rowid, field';
5414 if ($mode ==
'export') {
5417 $sql .=
' FROM '.MAIN_DB_PREFIX.$mode.
'_model WHERE';
5418 $sql .=
" type LIKE 'propale_%' OR type LIKE 'commande_%' OR type LIKE 'facture_%'";
5420 $resql =
$db->query($sql);
5422 while ($obj =
$db->fetch_object($resql)) {
5423 $oldfield = $obj->field;
5424 $newfield = str_replace(array(
',f.facnumber',
'f.facnumber,',
'f.total,',
'f.tva,'), array(
',f.ref',
'f.ref,',
'f.total_ht,',
'f.total_tva,'), $oldfield);
5426 if ($mode ==
'export') {
5427 $oldfilter = $obj->filter;
5428 $newfilter = str_replace(array(
'f.facnumber=',
'f.total=',
'f.tva='), array(
'f.ref=',
'f.total_ht=',
'f.total_tva='), $oldfilter);
5434 if ($oldfield != $newfield || $oldfilter != $newfilter) {
5435 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.$mode.
"_model SET field = '".
$db->escape($newfield).
"'";
5436 if ($mode ==
'export') {
5437 $sqlupd .=
", filter = '".$db->escape($newfilter).
"'";
5439 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5440 $resultstring .=
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$sqlupd.
"</td></tr>\n";
5441 $resqlupd =
$db->query($sqlupd);
5457 print
'<b>'.$langs->trans(
'MigrationImportOrExportProfiles', $mode).
"</b><br>\n";
5460 if ($resultstring) {
5461 print $resultstring;
5463 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5480 print
'<tr class="trforrunsql"><td colspan="4">';
5481 print
'<b>'.$langs->trans(
'MigrationContractLineRank').
"</b><br>\n";
5483 $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";
5484 $sql .=
" ORDER BY c.rowid,cd.rowid";
5486 $resql =
$db->query($sql);
5489 $current_contract = 0;
5490 while ($obj =
$db->fetch_object($resql)) {
5491 if (empty($current_contract) || $current_contract == $obj->cid) {
5497 $sqlUpd =
"UPDATE ".$db->prefix().
"contratdet SET rang=".(int) $currentRank.
" WHERE rowid=".(
int) $obj->cdid;
5498 $resultstring =
'.';
5499 print $resultstring;
5500 $resqlUpd =
$db->query($sqlUpd);
5506 $current_contract = $obj->cid;
5519 if (!$resultstring) {
5520 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5535 $firstInstallVersion =
getDolGlobalString(
'MAIN_VERSION_FIRST_INSTALL', DOL_VERSION);
5536 $migrationNeeded = (
versioncompare(explode(
'.', $firstInstallVersion, 3), array(20, 0, -5)) < 0 && !$lock);
5538 print
'<tr class="trforrunsql"><td colspan="4">';
5539 print
'<b>'.$langs->trans(
'InvoiceExportModelsMigration').
"</b>: \n";
5541 if (! $migrationNeeded) {
5542 print $langs->trans(
"AlreadyDone");
5544 dolibarr_set_const(
$db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5551 $sql1 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_0' WHERE type = 'facture_1'";
5553 $resql1 =
$db->query($sql1);
5562 $modified1 =
$db->affected_rows($resql1);
5564 print str_repeat(
'.', $modified1);
5568 $sql2 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_1' WHERE type = 'facture_2'";
5570 $resql2 =
$db->query($sql2);
5579 $modified2 =
$db->affected_rows($resql2);
5581 print str_repeat(
'.', $modified2);
5585 if (empty($modified1 + $modified2)) {
5586 print $langs->trans(
'NothingToDo');
5591 dolibarr_set_const(
$db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5608 $bookKeepingAddon =
'';
5613 $bookKeepingAddon =
'mod_bookkeeping_neon';
5616 print
'<tr class="trforrunsql"><td colspan="4">';
5617 print
'<b>'.$langs->trans(
'MigrationAccountancyBookkeeping').
"</b><br>\n";
5620 if ($bookKeepingAddon ===
'mod_bookkeeping_argon') {
5623 $sql =
"SELECT DISTINCT YEAR(doc_date) as doc_year, MONTH(doc_date) as doc_month, code_journal, piece_num FROM ".$db->prefix().
"accounting_bookkeeping";
5624 $sql .=
" WHERE ref IS NULL AND entity = ".((int) $entity);
5625 $sql .=
" ORDER BY doc_year, doc_month, code_journal, piece_num";
5627 $resql =
$db->query($sql);
5629 require_once DOL_DOCUMENT_ROOT .
'/accountancy/class/bookkeeping.class.php';
5632 while ($obj =
$db->fetch_object($resql)) {
5633 $bookkeeping->doc_date =
dol_mktime(0, 0, 0, $obj->doc_month, 1, $obj->doc_year);
5634 $bookkeeping->code_journal = $obj->code_journal;
5635 $ref = $bookkeeping->getNextNumRef();
5637 $sqlUpd =
"UPDATE ".$db->prefix().
"accounting_bookkeeping SET ref = '".
$db->escape($ref).
"' WHERE piece_num = '".
$db->escape($obj->piece_num).
"' AND entity = ".((int) $entity);
5638 $resultstring =
'.';
5639 print $resultstring;
5640 $resqlUpd =
$db->query($sqlUpd);
5659 if (!$resultstring) {
5660 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5673 print
'<tr class="trforrunsql"><td colspan="4">';
5674 print
'<b>'.$langs->trans(
'MigrationApiRestTokens').
"</b>:\n";
5678 $allexistingtokens = array();
5682 $sqlforalltokens =
"SELECT oat.tokenstring";
5683 $sqlforalltokens .=
" FROM ".$db->prefix().
"oauth_token AS oat";
5684 $sqlforalltokens .=
" WHERE oat.service = 'dolibarr_rest_api'";
5686 $resalltoken =
$db->query($sqlforalltokens);
5689 while ($tokenobj =
$db->fetch_object($resalltoken)) {
5690 $allexistingtokens[] =
dolDecrypt($tokenobj->tokenstring);
5699 $sql =
"SELECT 'dolibarr_rest_api' AS service, u.api_key AS tokenstring, u.rowid AS fk_user, u.entity";
5700 $sql .=
" FROM llx_user AS u";
5701 $sql .=
" WHERE u.api_key IS NOT NULL AND u.api_key <> ''";
5703 $result =
$db->query($sql);
5708 while ($obj =
$db->fetch_object($result)) {
5709 if (!in_array(
dolDecrypt($obj->tokenstring), $allexistingtokens)) {
5711 unset($tmpuser->conf);
5713 $tmpuser->fetch((
int) $obj->fk_user,
'',
'', 1, ($obj->entity ? $obj->entity :
$conf->entity));
5715 $sqlforinsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"oauth_token (service, tokenstring, fk_user, datec, entity, apicount_total)";
5716 $sqlforinsert .=
" VALUES ('".$db->escape($obj->service).
"', '".
$db->escape(
dolEncrypt(
dolDecrypt($obj->tokenstring))).
"', ";
5717 $sqlforinsert .= ((int) $obj->fk_user).
", '".
$db->idate(
dol_now()).
"', ".((
int) $obj->entity).
", ";
5718 $sqlforinsert .=
getDolUserInt(
'API_COUNT_CALL', 0, $tmpuser);
5719 $sqlforinsert .=
")";
5721 $insertresult =
$db->query($sqlforinsert);
5722 if (!$insertresult) {
5742 if (!$nbofmigration) {
5743 print $langs->trans(
"NothingToDo").
"\n";
5745 print $langs->trans(
'MigratedTokens', $nbofmigration);
5762 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security.lib.php';
5763 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
5765 print
'<tr class="trforrunsql"><td colspan="4">';
5766 print
'<b>'.$langs->trans(
'InitAHMACKeyForBlockedLog').
"</b>:\n";
5772 if (empty($hmac_encoded_secret_key)) {
5774 $randomsecret = bin2hex(random_bytes(32));
5776 $hmac_secret_key =
'BLOCKEDLOGHMAC'.$randomsecret;
5778 $result =
dolibarr_set_const(
$db,
'BLOCKEDLOG_HMAC_KEY', $hmac_secret_key,
'chaine', 0,
'The secret key for HMAC used for blockedlog record',
$conf->entity);
5788 print $langs->trans(
'Done');
5791 $hmac_secret_key =
dolDecrypt($hmac_encoded_secret_key);
5793 if (! preg_match(
'/^BLOCKEDLOGHMAC/', $hmac_secret_key)) {
5794 print
'Error: Failed to decode the crypted value of the parameter BLOCKEDLOG_HMAC_KEY using the $dolibarr_main_crypt_key. A value was found in config parameters in database but decoding failed. May be the database data were restored onto another environment and the coding/decoding key $dolibarr_main_dolcrypt_key was not restored with the same value in conf.php file.';
5795 print
'Restore the value of $dolibarr_main_crypt_key that was used for encryption in database and restart the migration.';
5796 print
'If you don\'t use the Unalterable Log module, you can also remove the BLOCKEDLOG_HMAC_KEY entry from llx_const table. If you use the Unalterable Log, this is not possible because this will invalidate all past record.';
5803 print $langs->trans(
"NothingToDo").
"\n";
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
run_sql($sqlfile, $silent=1, $entity=0, $usesavepoint=1, $handler='', $okerror='default', $linelengthlimit=32768, $nocommentremoval=0, $offsetforchartofaccount=0, $colspan=0, $onlysqltoimportwebsite=0, $database='')
Launch a sql file.
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
versioncompare($versionarray1, $versionarray2)
Compare 2 versions (stored into 2 arrays), to know if a version (a,b,c) is lower than (x,...
migrate_blockedlog_add_end_file()
Migrate an old database to add the .end flag.
Class to manage Blocked Log.
Class to manage Ledger (General Ledger and Subledger)
Class to manage line orders.
Class to manage lines of contracts.
Class to manage invoices.
Class to manage invoice lines.
Class of the module paid holiday.
Parent class for log handlers.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
Class to manage order lines.
Class with list of lots and properties.
Class to manage commercial proposal lines.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
dol_copy($srcfile, $destfile, $newmask='0', $overwriteifexists=1, $testvirus=0, $indexdatabase=0)
Copy a file to another file.
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
dol_move_dir($srcdir, $destdir, $overwriteifexists=1, $indexdatabase=1, $renamedircontent=1)
Move a directory into another name.
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0, $level=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayreplacement=null, $excludesubdir=0, $excludefileext=null, $excludearchivefiles=0)
Copy a dir to another dir.
dol_is_file($pathoffile)
Return if path is a file.
dol_is_dir($folder)
Test if filename is a directory.
dol_now($mode='gmt')
Return date for now.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
getDolUserInt($key, $default=0, $tmpuser=null)
Return Dolibarr user constant int value.
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
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.
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocaltax1_rate, $uselocaltax2_rate, $notused, $price_base_type, $info_bits, $type, $seller=null, $localtaxes_array=[], $progress=100, $multicurrency_tx=1, $pu_devise=0, $multicurrency_code='')
Calculate totals (net, vat, ...) of a line.
print $langs trans('Date')." left Ref Label right Qty right Price right TotalHT right TotalTTC right right right right right right right right right centpercent right TotalHT right n right VAT right n right TotalVAT right n No sujeto a RE IRPF right TotalLT1 right n right TotalLT2 right n right TotalTTC right n takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency right TotalTTC takeposcustomercurrency right takeposcustomercurrency n right Paid right PaymentTypeShortLIQ right SELECT p pos_change as p datep as p p num_paiement as f pf amount as amount
dol_decode($chain, $key='1')
Decode a base 64 encoded + specific delta change.
dolDecrypt($chain, $key='', $patterntotest='')
Decode a string with a symmetric encryption.
dolEncrypt($chain, $key='', $ciphering='', $forceseed='', $obfuscationmode='dolcrypt')
Encode a string with a symmetric encryption.
migrate_supplier_prices_permissions($db, $langs, $conf)
Grant the "supplier prices" advanced permissions introduced in 23.0 (product/service read_supplier_pr...
if($db !==null && $db->connected) if( $ret migrate_paiements)($db, $langs, $conf)
Records payment links for an invoice in a join table (link n<-->n for payments<-->invoices)
migrate_links_transfert($db, $langs, $conf)
Function to migrate links into llx_bank_url.
migrate_paiements_orphelins_1($db, $langs, $conf)
Repair orphan payments (lost relations due to bugs) Query to check if there are still orphans: select...
migrate_user_rights_entity($db, $langs, $conf)
Migrate to add entity value into llx_user_rights.
migrate_reload_modules($db, $langs, $conf, $listofmodule=array(), $force=0)
Disable/Re-enable features modules.
migrate_contracts_date3($db, $langs, $conf)
Mise a jour des dates de creation de contrat.
migrate_restore_missing_links($db, $langs, $conf)
Migration du champ fk_remise_except dans llx_facturedet doit correspondre a Link in llx_societe_remis...
migrate_rename_directories($db, $langs, $conf, $oldname, $newname)
Migration directory.
migrate_project_task_actors($db, $langs, $conf)
Migration de la table llx_projet_task_actors vers llx_element_contact.
migrate_holiday_path()
Migrate file from old path to new one for users.
migrate_commande_deliveryaddress($db, $langs, $conf)
Migration du champ fk_adresse_livraison dans expedition 2.6 -> 2.7.
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)
Reopen the contracts that have at least one line that is not closed (/completed).
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_accountingbookkeeping(int $entity)
Migrate Ref in bookkeeping lines.
migrate_price_propal($db, $langs, $conf)
Update total of proposal lines.
migrate_stocks($db, $langs, $conf)
Migration of the stock field in the Products table.
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)
Migrate the Order Details in the Delivery Details.
migrate_remise_except_entity($db, $langs, $conf)
Migrate to add entity value into llx_societe_remise_except.
migrate_paiements_orphelins_2($db, $langs, $conf)
Repair orphan payments (lost relations due to bugs) Query to check if there are still orphans: select...
migrate_price_contrat($db, $langs, $conf)
Update total of contract lines.
migrate_users_socialnetworks()
Migrate users fields facebook and co to socialnetworks.
migrate_user_photospath2()
Migrate file from old path users/99/file.jpg into users/99/photos/file.jpg.
migrate_contracts_det($db, $langs, $conf)
Update the contracts (Contract Management + Contract Detail)
migrate_get_rights_def_id($db, $module, $perms, $subperms)
Return the permission id (llx_rights_def.id) matching a module/perms/subperms triplet,...
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)
Relations between the Shipping and Client Order in the table llx_co_exp.
migrate_actioncomm_element($db, $langs, $conf)
Migrate link stored into fk_xxxx into fk_element and elementtype.
migrate_blockedlog_add_hmac_key()
Add the HMAC key for blockedlog v2+ Note that this is used on old version only.
migrate_productlot_path()
Migrate file from old path to new one for lot path.
migrate_user_photospath()
Migrate file from old path to new one for users.
migrate_invoice_export_models()
Invoice exports been shifted (facture_1 => facture_0, facture_2 => facture_1) in version 20,...
migrate_thirdparties_socialnetworks()
Migrate thirdparties fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_event_assignement($db, $langs, $conf)
Migrate event assignment to owner.
migrate_clean_association($db, $langs, $conf)
Delete duplicates in table categorie_association.
migrate_commande_livraison($db, $langs, $conf)
Correspondence of the deliveries and the Customer Orders in the table llx_co_liv.
migrate_event_assignement_contact($db, $langs, $conf)
Migrate event assignment to owner.
migrate_contracts_date1($db, $langs, $conf)
Update missing Contract Dates.
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.
migrate_apiresttokens()
Migrate API key in oauth_token table.