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',
723 'MAIN_MODULE_SYSLOG' =>
'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',
748 if (!$error && $enablemodules) {
750 $listofmodules = array();
751 $enablemodules = preg_replace(
'/enablemodules=/',
'', $enablemodules);
752 $tmplistofmodules = explode(
',', $enablemodules);
753 foreach ($tmplistofmodules as $value) {
754 $listofmodules[$value] =
'forceactivate';
758 if ($resultreloadmodules < 0) {
766 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' =>
$conf);
769 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterDB', $parameters,
$object, $action);
770 if ($hookmanager->resNbOfHooks > 0) {
772 print
'<tr><td colspan="4">';
773 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
774 print $hookmanager->error;
775 print
"<!-- (".$reshook.
") -->";
778 print
'<tr class="trforrunsql"><td colspan="4">';
779 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (DB)</b>: <span class="ok">OK</span>';
780 print
"<!-- (".$reshook.
") -->";
785 if (!empty(
$conf->modules_parts[
'hooks'])) {
786 print
'<tr class="trforrunsql"><td colspan="4">';
787 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterDB");
798 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"const SET VALUE = 'torefresh' WHERE name = 'MAIN_FIRST_PING_OK_ID'";
813 foreach ($listofentities as $entity) {
815 $conf->setEntityValues($db, $entity);
817 if (defined(
'SYSLOG_FILE')) {
818 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
820 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
824 $srcroot = DOL_DOCUMENT_ROOT.
'/install/medias';
825 $destroot = DOL_DATA_ROOT.
'/medias';
838 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' =>
$conf);
841 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterFiles', $parameters,
$object, $action);
842 if ($hookmanager->resNbOfHooks > 0) {
844 print
'<tr><td colspan="4">';
845 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
846 print $hookmanager->error;
847 print
"<!-- (".$reshook.
") -->";
850 print
'<tr class="trforrunsql"><td colspan="4">';
851 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (Files)</b>: <span class="ok">OK</span>';
852 print
"<!-- (".$reshook.
") -->";
857 if (!empty(
$conf->modules_parts[
'hooks'])) {
858 print
'<tr class="trforrunsql"><td colspan="4">';
859 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterFiles");
869 print
'<table width="100%">';
870 print
'<tr><td style="width: 30%">'.$langs->trans(
"MigrationFinished").
'</td>';
871 print
'<td class="right">';
875 print
'<span class="error">'.$langs->trans(
"Error").
'</span> - ';
879 print
'<script type="text/javascript">
880 jQuery(document).ready(function() {
881 function init_trrunsql()
883 console.log("toggle .trforrunsql");
884 jQuery(".trforrunsql").toggle();
887 jQuery(".trforrunsqlshowhide").click(function() {
892 print
'<a class="reposition trforrunsqlshowhide" href="#">'.$langs->trans(
"ShowHideDetails").
'</a>';
895 print
'</td></tr>'.
"\n";
901 print
'<div class="error">'.$langs->trans(
'ErrorWrongParameters').
'</div>';
906if ($error && isset($argv[1])) {
912pFooter($error ? 2 : 0, $setuplang);
914if ($db !==
null &&
$db->connected) {
935 print
'<tr><td colspan="4">';
938 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
940 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
941 $obj =
$db->fetch_object($result);
943 $sql =
"SELECT p.rowid, p.fk_facture, p.amount";
944 $sql .=
" FROM ".MAIN_DB_PREFIX.
"paiement as p";
945 $sql .=
" WHERE p.fk_facture > 0";
947 $resql =
$db->query($sql);
954 $num =
$db->num_rows($resql);
957 $obj =
$db->fetch_object($resql);
958 $row[$i][0] = $obj->rowid;
959 $row[$i][1] = $obj->fk_facture;
960 $row[$i][2] = $obj->amount;
968 print $langs->trans(
'MigrationPaymentsNumberToUpdate', $num).
"<br>\n";
972 for ($i = 0; $i < $num; $i++) {
973 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
974 $sql .=
" VALUES (".((int) $row[$i][1]).
",".((int) $row[$i][0]).
",".((float) $row[$i][2]).
")";
976 $res +=
$db->query($sql);
978 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET fk_facture = 0 WHERE rowid = ".((int) $row[$i][0]);
980 $res +=
$db->query($sql);
982 print $langs->trans(
'MigrationProcessPaymentUpdate', $row[$i][0]).
"<br>\n";
986 if (is_array($row) && $res == (2 * count($row))) {
988 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
991 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
994 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
997 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
1015 print
'<tr><td colspan="4">';
1018 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
1020 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
1021 $obj =
$db->fetch_object($result);
1024 $sql =
"SELECT DISTINCT p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1025 $sql .=
" bu2.url_id as socid";
1026 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1027 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1028 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')";
1029 $sql .=
" WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid";
1030 $sql .=
" AND b.rappro = 1";
1031 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1033 $resql =
$db->query($sql);
1039 $num =
$db->num_rows($resql);
1042 $obj =
$db->fetch_object($resql);
1043 if ($obj->pamount == $obj->bamount && $obj->socid) {
1044 $row[$j][
'paymentid'] = $obj->rowid;
1045 $row[$j][
'pamount'] = $obj->pamount;
1046 $row[$j][
'fk_bank'] = $obj->fk_bank;
1047 $row[$j][
'bamount'] = $obj->bamount;
1048 $row[$j][
'socid'] = $obj->socid;
1049 $row[$j][
'datec'] = $obj->datec;
1059 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 1).
': '.count($row).
"<br>\n";
1064 for ($i = 0; $i < $num; $i++) {
1066 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>';
1070 $sql =
" SELECT DISTINCT f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1071 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1072 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1073 $sql .=
" AND pf.fk_facture IS NULL";
1074 $sql .=
" ORDER BY f.fk_statut";
1076 $resql =
$db->query($sql);
1078 $num =
$db->num_rows($resql);
1081 $obj =
$db->fetch_object($resql);
1082 $facid = $obj->rowid;
1084 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1085 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1087 $res +=
$db->query($sql);
1089 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1097 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1099 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1104 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1107 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1125 print
'<tr><td colspan="4">';
1128 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
1130 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
1131 $obj =
$db->fetch_object($result);
1134 $sql =
"SELECT DISTINCT p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1135 $sql .=
" bu2.url_id as socid";
1136 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1137 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1138 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')";
1139 $sql .=
" WHERE pf.rowid IS NULL AND (p.fk_bank = bu.fk_bank AND bu.type = 'payment') AND bu.fk_bank = b.rowid";
1140 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1142 $resql =
$db->query($sql);
1148 $num =
$db->num_rows($resql);
1151 $obj =
$db->fetch_object($resql);
1152 if ($obj->pamount == $obj->bamount && $obj->socid) {
1153 $row[$j][
'paymentid'] = $obj->rowid;
1154 $row[$j][
'pamount'] = $obj->pamount;
1155 $row[$j][
'fk_bank'] = $obj->fk_bank;
1156 $row[$j][
'bamount'] = $obj->bamount;
1157 $row[$j][
'socid'] = $obj->socid;
1158 $row[$j][
'datec'] = $obj->datec;
1171 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 2).
': '.count($row).
"<br>\n";
1175 for ($i = 0; $i < $num; $i++) {
1177 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>';
1181 $sql =
" SELECT DISTINCT f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1182 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1183 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1184 $sql .=
" AND pf.fk_facture IS NULL";
1185 $sql .=
" ORDER BY f.fk_statut";
1187 $resql =
$db->query($sql);
1189 $num =
$db->num_rows($resql);
1192 $obj =
$db->fetch_object($resql);
1193 $facid = $obj->rowid;
1195 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1196 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1198 $res +=
$db->query($sql);
1200 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1209 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1211 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1216 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1222 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiement DROP COLUMN fk_facture";
1232 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1249 print
'<tr><td colspan="4">';
1254 print
'<b>'.$langs->trans(
'MigrationContractsUpdate').
"</b><br>\n";
1256 $sql =
"SELECT c.rowid as cref, c.date_contrat, c.statut, c.fk_product, c.fk_facture, c.fk_user_author,";
1257 $sql .=
" p.ref, p.label, p.description, p.price, p.tva_tx, p.duration, cd.rowid";
1258 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c";
1259 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p";
1260 $sql .=
" ON c.fk_product = p.rowid";
1261 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"contratdet as cd";
1262 $sql .=
" ON c.rowid=cd.fk_contrat";
1263 $sql .=
" WHERE cd.rowid IS NULL AND p.rowid IS NOT NULL";
1264 $resql =
$db->query($sql);
1270 $num =
$db->num_rows($resql);
1273 print $langs->trans(
'MigrationContractsNumberToUpdate', $num).
"<br>\n";
1277 $obj =
$db->fetch_object($resql);
1279 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"contratdet (";
1280 $sql .=
"fk_contrat, fk_product, statut, label, description,";
1281 $sql .=
"date_ouverture_prevue, date_ouverture, date_fin_validite, tva_tx, qty,";
1282 $sql .=
"subprice, price_ht, fk_user_author, fk_user_ouverture)";
1283 $sql .=
" VALUES (";
1284 $sql .= ((int) $obj->cref).
", ".($obj->fk_product ? ((int) $obj->fk_product) : 0).
", ";
1286 $sql .=
"'".$db->escape($obj->label).
"', null, ";
1287 $sql .= ($obj->date_contrat ?
"'".$db->idate(
$db->jdate($obj->date_contrat)).
"'" :
"null").
", ";
1290 $sql .= ((float) $obj->tva_tx).
", 1, ";
1291 $sql .= ((float) $obj->price).
", ".((float) $obj->price).
", ".((int) $obj->fk_user_author).
",";
1295 if (
$db->query($sql)) {
1296 print $langs->trans(
'MigrationContractsLineCreation', $obj->cref).
"<br>\n";
1308 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1311 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1314 print $langs->trans(
'MigrationContractsNothingToUpdate').
"<br>\n";
1317 print $langs->trans(
'MigrationContractsFieldDontExist').
"<br>\n";
1334 print
'<tr><td colspan="4">';
1339 print
'<b>'.$langs->trans(
'MigrationBankTransfertsUpdate').
"</b><br>\n";
1341 $sql =
"SELECT ba.rowid as barowid, bb.rowid as bbrowid";
1342 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as bb, ".MAIN_DB_PREFIX.
"bank as ba";
1343 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu ON bu.fk_bank = ba.rowid";
1344 $sql .=
" WHERE ba.amount = -bb.amount AND ba.fk_account <> bb.fk_account";
1345 $sql .=
" AND ba.datev = bb.datev AND ba.datec = bb.datec";
1346 $sql .=
" AND bu.fk_bank IS NULL";
1347 $resql =
$db->query($sql);
1353 $num =
$db->num_rows($resql);
1356 print $langs->trans(
'MigrationBankTransfertsToUpdate', $num).
"<br>\n";
1360 $obj =
$db->fetch_object($resql);
1362 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"bank_url (";
1363 $sql .=
"fk_bank, url_id, url, label, type";
1365 $sql .=
" VALUES (";
1366 $sql .= $obj->barowid.
",".$obj->bbrowid.
", '/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'";
1372 if (!
$db->query($sql)) {
1383 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1386 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1389 print $langs->trans(
'MigrationBankTransfertsNothingToUpdate').
"<br>\n";
1408 print
'<tr><td colspan="4">';
1411 print
'<b>'.$langs->trans(
'MigrationContractsEmptyDatesUpdate').
"</b><br>\n";
1413 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set date_contrat=tms where date_contrat is null";
1415 $resql =
$db->query($sql);
1419 if (
$db->affected_rows($resql) > 0) {
1420 print $langs->trans(
'MigrationContractsEmptyDatesUpdateSuccess').
"<br>\n";
1422 print $langs->trans(
'MigrationContractsEmptyDatesNothingToUpdate').
"<br>\n";
1425 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=tms where datec is null";
1427 $resql =
$db->query($sql);
1431 if (
$db->affected_rows($resql) > 0) {
1432 print $langs->trans(
'MigrationContractsEmptyCreationDatesUpdateSuccess').
"<br>\n";
1434 print $langs->trans(
'MigrationContractsEmptyCreationDatesNothingToUpdate').
"<br>\n";
1450 print
'<tr><td colspan="4">';
1455 print
'<b>'.$langs->trans(
'MigrationContractsInvalidDatesUpdate').
"</b><br>\n";
1457 $sql =
"SELECT c.rowid as cref, c.datec, c.date_contrat, MIN(cd.date_ouverture) as datemin";
1458 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c,";
1459 $sql .=
" ".MAIN_DB_PREFIX.
"contratdet as cd";
1460 $sql .=
" WHERE c.rowid=cd.fk_contrat AND cd.date_ouverture IS NOT NULL";
1461 $sql .=
" GROUP BY c.rowid, c.date_contrat";
1462 $resql =
$db->query($sql);
1468 $num =
$db->num_rows($resql);
1471 $nbcontratsmodifie = 0;
1475 $obj =
$db->fetch_object($resql);
1476 if ($obj->date_contrat > $obj->datemin) {
1477 $datemin =
$db->jdate($obj->datemin);
1479 print $langs->trans(
'MigrationContractsInvalidDateFix', $obj->cref, $obj->date_contrat, $obj->datemin).
"<br>\n";
1480 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1481 $sql .=
" SET date_contrat='".$db->idate($datemin).
"'";
1482 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1483 $resql2 =
$db->query($sql);
1488 $nbcontratsmodifie++;
1495 if ($nbcontratsmodifie) {
1496 print $langs->trans(
'MigrationContractsInvalidDatesNumber', $nbcontratsmodifie).
"<br>\n";
1498 print $langs->trans(
'MigrationContractsInvalidDatesNothingToUpdate').
"<br>\n";
1518 print
'<tr><td colspan="4">';
1521 print
'<b>'.$langs->trans(
'MigrationContractsIncoherentCreationDateUpdate').
"</b><br>\n";
1523 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=date_contrat where datec is null or datec > date_contrat";
1525 $resql =
$db->query($sql);
1529 if (
$db->affected_rows($resql) > 0) {
1530 print $langs->trans(
'MigrationContractsIncoherentCreationDateUpdateSuccess').
"<br>\n";
1532 print $langs->trans(
'MigrationContractsIncoherentCreationDateNothingToUpdate').
"<br>\n";
1548 print
'<tr><td colspan="4">';
1551 print
'<b>'.$langs->trans(
'MigrationReopeningContracts').
"</b><br>\n";
1553 $sql =
"SELECT c.rowid as cref FROM ".MAIN_DB_PREFIX.
"contrat as c, ".MAIN_DB_PREFIX.
"contratdet as cd";
1554 $sql .=
" WHERE cd.statut = 4 AND c.statut=2 AND c.rowid=cd.fk_contrat";
1556 $resql =
$db->query($sql);
1560 if (
$db->affected_rows($resql) > 0) {
1563 $num =
$db->num_rows($resql);
1566 $nbcontratsmodifie = 0;
1570 $obj =
$db->fetch_object($resql);
1572 print $langs->trans(
'MigrationReopenThisContract', $obj->cref).
"<br>\n";
1573 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1574 $sql .=
" SET statut = 1";
1575 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1576 $resql2 =
$db->query($sql);
1581 $nbcontratsmodifie++;
1588 if ($nbcontratsmodifie) {
1589 print $langs->trans(
'MigrationReopenedContractsNumber', $nbcontratsmodifie).
"<br>\n";
1591 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1595 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1613 print
'<tr><td colspan="4">';
1615 print
'<b>'.$langs->trans(
'SuppliersInvoices').
"</b><br>\n";
1618 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"paiementfourn",
"fk_facture_fourn");
1619 $obj =
$db->fetch_object($result);
1624 $select_sql =
'SELECT rowid, fk_facture_fourn, amount';
1625 $select_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn';
1626 $select_sql .=
' WHERE fk_facture_fourn IS NOT NULL';
1629 $select_resql =
$db->query($select_sql);
1630 if ($select_resql) {
1631 $select_num =
$db->num_rows($select_resql);
1635 while (($i < $select_num) && (!$error)) {
1636 $select_obj =
$db->fetch_object($select_resql);
1639 $check_sql =
'SELECT fk_paiementfourn, fk_facturefourn';
1640 $check_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn';
1641 $check_sql .=
' WHERE fk_paiementfourn = '.((int) $select_obj->rowid).
' AND fk_facturefourn = '.((int) $select_obj->fk_facture_fourn);
1642 $check_resql =
$db->query($check_sql);
1644 $check_num =
$db->num_rows($check_resql);
1645 if ($check_num == 0) {
1649 print
'<tr><td colspan="4" class="nowrap"><b>'.$langs->trans(
'SuppliersInvoices').
'</b></td></tr>';
1650 print
'<tr><td>fk_paiementfourn</td><td>fk_facturefourn</td><td>'.$langs->trans(
'Amount').
'</td><td> </td></tr>';
1653 print
'<tr class="oddeven">';
1654 print
'<td>'.$select_obj->rowid.
'</td><td>'.$select_obj->fk_facture_fourn.
'</td><td>'.$select_obj->amount.
'</td>';
1656 $insert_sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn SET ';
1657 $insert_sql .=
' fk_paiementfourn = \''.$select_obj->rowid.
'\',
';
1658 $insert_sql .= ' fk_facturefourn = \
''.$select_obj->fk_facture_fourn.
'\',
';
1659 $insert_sql .= ' amount = \
''.$select_obj->amount.
'\'';
1660 $insert_resql =
$db->query($insert_sql);
1662 if ($insert_resql) {
1664 print
'<td><span class="ok">'.$langs->trans(
"OK").
'</span></td>';
1666 print
'<td><span class="error">Error on insert</span></td>';
1682 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1686 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiementfourn DROP COLUMN fk_facture_fourn";
1689 print
'<tr><td>'.$langs->trans(
"Error").
'</td></tr>';
1693 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1710 $tmpmysoc->setMysoc(
$conf);
1714 print
'<tr><td colspan="4">';
1717 print
'<b>'.$langs->trans(
'MigrationInvoice').
"</b><br>\n";
1720 $sql =
"SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as vatrate, fd.total_ttc, fd.info_bits,";
1721 $sql .=
" f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f";
1722 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facturedet as fd, ".MAIN_DB_PREFIX.
"facture as f";
1723 $sql .=
" WHERE fd.fk_facture = f.rowid";
1724 $sql .=
" AND (((fd.total_ttc = 0 AND fd.remise_percent != 100) or fd.total_ttc IS NULL) or f.total_ttc IS NULL)";
1728 $resql =
$db->query($sql);
1730 $num =
$db->num_rows($resql);
1734 $obj =
$db->fetch_object($resql);
1736 $rowid = $obj->rowid;
1738 $pu = $obj->subprice;
1739 $vatrate = $obj->vatrate;
1740 $remise_percent = $obj->remise_percent;
1741 $remise_percent_global = $obj->remise_percent_global;
1742 $total_ttc_f = $obj->total_ttc_f;
1743 $info_bits = $obj->info_bits;
1747 $facligne->fetch($rowid);
1749 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $facligne->product_type, $tmpmysoc);
1750 $total_ht = $result[0];
1751 $total_tva = $result[1];
1752 $total_ttc = $result[2];
1754 $facligne->total_ht = (float) $total_ht;
1755 $facligne->total_tva = (float) $total_tva;
1756 $facligne->total_ttc = (float) $total_ttc;
1758 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);
1760 $facligne->update_total();
1764 if (!$total_ttc_f) {
1766 $facture->id = $obj->facid;
1768 if ($facture->fetch($facture->id) >= 0) {
1769 if ($facture->update_price() > 0) {
1772 print
"Error id=".$facture->id;
1785 print $langs->trans(
"AlreadyDone");
1791 print
"Error #1 ".$db->error();
1813 $tmpmysoc->setMysoc(
$conf);
1817 print
'<tr><td colspan="4">';
1820 print
'<b>'.$langs->trans(
'MigrationProposal').
"</b><br>\n";
1823 $sql =
"SELECT pd.rowid, pd.qty, pd.subprice, pd.remise_percent, pd.tva_tx as vatrate, pd.info_bits,";
1824 $sql .=
" p.rowid as propalid, p.remise_percent as remise_percent_global";
1825 $sql .=
" FROM ".MAIN_DB_PREFIX.
"propaldet as pd, ".MAIN_DB_PREFIX.
"propal as p";
1826 $sql .=
" WHERE pd.fk_propal = p.rowid";
1827 $sql .=
" AND ((pd.total_ttc = 0 AND pd.remise_percent != 100) or pd.total_ttc IS NULL)";
1830 $resql =
$db->query($sql);
1832 $num =
$db->num_rows($resql);
1836 $obj =
$db->fetch_object($resql);
1838 $rowid = $obj->rowid;
1840 $pu = $obj->subprice;
1841 $vatrate = $obj->vatrate;
1842 $remise_percent = $obj->remise_percent;
1843 $remise_percent_global = $obj->remise_percent_global;
1844 $info_bits = $obj->info_bits;
1848 $propalligne->fetch($rowid);
1850 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $propalligne->product_type, $tmpmysoc);
1851 $total_ht = $result[0];
1852 $total_tva = $result[1];
1853 $total_ttc = $result[2];
1855 $propalligne->total_ht = (float) $total_ht;
1856 $propalligne->total_tva = (float) $total_tva;
1857 $propalligne->total_ttc = (float) $total_ttc;
1859 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);
1861 $propalligne->update_total();
1866 print $langs->trans(
"AlreadyDone");
1873 print
"Error #1 ".$db->error();
1896 $tmpmysoc->setMysoc(
$conf);
1897 if (empty($tmpmysoc->country_id)) {
1898 $tmpmysoc->country_id = 0;
1901 print
'<tr><td colspan="4">';
1904 print
'<b>'.$langs->trans(
'MigrationContract').
"</b><br>\n";
1907 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1908 $sql .=
" c.rowid as contratid";
1909 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd, ".MAIN_DB_PREFIX.
"contrat as c";
1910 $sql .=
" WHERE cd.fk_contrat = c.rowid";
1911 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100 AND cd.subprice > 0) or cd.total_ttc IS NULL)";
1914 $resql =
$db->query($sql);
1916 $num =
$db->num_rows($resql);
1920 $obj =
$db->fetch_object($resql);
1922 $rowid = $obj->rowid;
1924 $pu = $obj->subprice;
1925 $vatrate = $obj->vatrate;
1926 $remise_percent = $obj->remise_percent;
1927 $info_bits = $obj->info_bits;
1932 $contratligne->fetch($rowid);
1934 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, 0,
'HT', $info_bits, $contratligne->product_type, $tmpmysoc);
1935 $total_ht = $result[0];
1936 $total_tva = $result[1];
1937 $total_ttc = $result[2];
1939 $contratligne->total_ht = (float) $total_ht;
1940 $contratligne->total_tva = (float) $total_tva;
1941 $contratligne->total_ttc = (float) $total_ttc;
1943 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);
1945 $contratligne->update_total();
1950 print $langs->trans(
"AlreadyDone");
1957 print
"Error #1 ".$db->error();
1980 $tmpmysoc->setMysoc(
$conf);
1982 print
'<tr><td colspan="4">';
1985 print
'<b>'.$langs->trans(
'MigrationOrder').
"</b><br>\n";
1988 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1989 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1990 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"commande as c";
1991 $sql .=
" WHERE cd.fk_commande = c.rowid";
1992 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1995 $resql =
$db->query($sql);
1997 $num =
$db->num_rows($resql);
2001 $obj =
$db->fetch_object($resql);
2003 $rowid = $obj->rowid;
2005 $pu = $obj->subprice;
2006 $vatrate = $obj->vatrate;
2007 $remise_percent = $obj->remise_percent;
2008 $remise_percent_global = $obj->remise_percent_global;
2009 $info_bits = $obj->info_bits;
2013 $commandeligne->fetch($rowid);
2015 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $tmpmysoc);
2016 $total_ht = $result[0];
2017 $total_tva = $result[1];
2018 $total_ttc = $result[2];
2020 $commandeligne->total_ht = (float) $total_ht;
2021 $commandeligne->total_tva = (float) $total_tva;
2022 $commandeligne->total_ttc = (float) $total_ttc;
2024 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);
2026 $commandeligne->update_total();
2031 print $langs->trans(
"AlreadyDone");
2048 print
"Error #1 ".$db->error();
2073 $tmpmysoc->setMysoc(
$conf);
2075 print
'<tr><td colspan="4">';
2078 print
'<b>'.$langs->trans(
'MigrationSupplierOrder').
"</b><br>\n";
2081 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
2082 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
2083 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cd, ".MAIN_DB_PREFIX.
"commande_fournisseur as c";
2084 $sql .=
" WHERE cd.fk_commande = c.rowid";
2085 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
2088 $resql =
$db->query($sql);
2090 $num =
$db->num_rows($resql);
2094 $obj =
$db->fetch_object($resql);
2096 $rowid = $obj->rowid;
2098 $pu = $obj->subprice;
2099 $vatrate = $obj->vatrate;
2100 $remise_percent = $obj->remise_percent;
2101 $remise_percent_global = $obj->remise_percent_global;
2102 $info_bits = $obj->info_bits;
2106 $commandeligne->fetch($rowid);
2108 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type,
$mysoc);
2109 $total_ht = $result[0];
2110 $total_tva = $result[1];
2111 $total_ttc = $result[2];
2113 $commandeligne->total_ht = (float) $total_ht;
2114 $commandeligne->total_tva = (float) $total_tva;
2115 $commandeligne->total_ttc = (float) $total_ttc;
2117 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);
2119 $commandeligne->update_total();
2124 print $langs->trans(
"AlreadyDone");
2141 print
"Error #1 ".$db->error();
2167 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
2169 if (count($modellist) == 0) {
2171 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('crabe','invoice')";
2172 $resql =
$db->query($sql);
2180 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
2182 if (count($modellist) == 0) {
2184 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('einstein','order')";
2185 $resql =
$db->query($sql);
2193 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
2195 if (count($modellist) == 0) {
2197 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('rouget','shipping')";
2198 $resql =
$db->query($sql);
2221 print
'<tr><td colspan="4">';
2224 print
'<b>'.$langs->trans(
'MigrationShipmentOrderMatching').
"</b><br>\n";
2226 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"fk_commande");
2227 $obj =
$db->fetch_object($result);
2233 $sql =
"SELECT e.rowid, e.fk_commande FROM ".MAIN_DB_PREFIX.
"expedition as e";
2234 $resql =
$db->query($sql);
2237 $num =
$db->num_rows($resql);
2241 $obj =
$db->fetch_object($resql);
2243 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_exp (fk_expedition,fk_commande)";
2244 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2245 $resql2 =
$db->query($sql);
2258 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition DROP COLUMN fk_commande";
2259 print $langs->trans(
'FieldRenamed').
"<br>\n";
2269 print $langs->trans(
'AlreadyDone').
"<br>\n";
2286 print
'<tr><td colspan="4">';
2289 print
'<b>'.$langs->trans(
'MigrationDeliveryOrderMatching').
"</b><br>\n";
2291 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_commande");
2292 $obj =
$db->fetch_object($result);
2298 $sql =
"SELECT l.rowid, l.fk_commande,";
2299 $sql .=
" c.ref_client, c.date_livraison as delivery_date";
2300 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l, ".MAIN_DB_PREFIX.
"commande as c";
2301 $sql .=
" WHERE c.rowid = l.fk_commande";
2302 $resql =
$db->query($sql);
2305 $num =
$db->num_rows($resql);
2309 $obj =
$db->fetch_object($resql);
2311 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_liv (fk_livraison,fk_commande)";
2312 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2313 $resql2 =
$db->query($sql);
2316 $delivery_date =
$db->jdate($obj->delivery_date);
2318 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2319 $sqlu .=
" ref_client = '".$db->escape($obj->ref_client).
"'";
2320 $sqlu .=
", date_livraison = '".$db->idate($delivery_date).
"'";
2321 $sqlu .=
" WHERE rowid = ".((int) $obj->rowid);
2322 $resql3 =
$db->query($sqlu);
2338 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_commande";
2339 print $langs->trans(
'FieldRenamed').
"<br>\n";
2349 print $langs->trans(
'AlreadyDone').
"<br>\n";
2366 print
'<tr><td colspan="4">';
2369 print
'<b>'.$langs->trans(
'MigrationDeliveryDetail').
"</b><br>\n";
2373 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_commande_ligne");
2374 $obj =
$db->fetch_object($result);
2380 $sql =
"SELECT cd.rowid, cd.fk_product, cd.description, cd.subprice, cd.total_ht";
2381 $sql .=
", ld.fk_livraison";
2382 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"livraisondet as ld";
2383 $sql .=
" WHERE ld.fk_commande_ligne = cd.rowid";
2384 $resql =
$db->query($sql);
2387 $num =
$db->num_rows($resql);
2391 $obj =
$db->fetch_object($resql);
2393 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"livraisondet SET";
2394 $sql .=
" fk_product = ".((int) $obj->fk_product);
2395 $sql .=
",description = '".$db->escape($obj->description).
"'";
2396 $sql .=
",subprice = ".price2num($obj->subprice);
2397 $sql .=
",total_ht = ".price2num($obj->total_ht);
2398 $sql .=
" WHERE fk_commande_ligne = ".((int) $obj->rowid);
2399 $resql2 =
$db->query($sql);
2402 $sql =
"SELECT total_ht";
2403 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
2404 $sql .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2405 $resql3 =
$db->query($sql);
2408 $obju =
$db->fetch_object($resql3);
2409 $total_ht = $obju->total_ht + $obj->total_ht;
2411 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2412 $sqlu .=
" total_ht = ".price2num($total_ht,
'MT');
2413 $sqlu .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2414 $resql4 =
$db->query($sqlu);
2434 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet CHANGE fk_commande_ligne fk_origin_line integer";
2435 print $langs->trans(
'FieldRenamed').
"<br>\n";
2445 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_origin_line");
2446 $obj =
$db->fetch_object($result);
2448 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet ADD COLUMN fk_origin_line integer after fk_livraison";
2451 print $langs->trans(
'AlreadyDone').
"<br>\n";
2468 print
'<tr><td colspan="4">';
2471 print
'<b>'.$langs->trans(
'MigrationStockDetail').
"</b><br>\n";
2477 $sql =
"SELECT SUM(reel) as total, fk_product";
2478 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_stock as ps";
2479 $sql .=
" GROUP BY fk_product";
2480 $resql =
$db->query($sql);
2483 $num =
$db->num_rows($resql);
2487 $obj =
$db->fetch_object($resql);
2489 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET";
2490 $sql .=
" stock = ".price2num($obj->total,
'MS');
2491 $sql .=
" WHERE rowid = ".((int) $obj->fk_product);
2493 $resql2 =
$db->query($sql);
2530 print
'<tr><td colspan="4">';
2533 print
'<b>'.$langs->trans(
'MigrationMenusDetail').
"</b><br>\n";
2537 if (
$db->DDLInfoTable(MAIN_DB_PREFIX.
"menu_constraint")) {
2540 $sql =
"SELECT m.rowid, mc.action";
2541 $sql .=
" FROM ".MAIN_DB_PREFIX.
"menu_constraint as mc, ".MAIN_DB_PREFIX.
"menu_const as md, ".MAIN_DB_PREFIX.
"menu as m";
2542 $sql .=
" WHERE md.fk_menu = m.rowid AND md.fk_constraint = mc.rowid";
2543 $sql .=
" AND m.enabled = '1'";
2544 $resql =
$db->query($sql);
2547 $num =
$db->num_rows($resql);
2550 $obj =
$db->fetch_object($resql);
2552 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"menu SET";
2553 $sql .=
" enabled = '".$db->escape($obj->action).
"'";
2554 $sql .=
" WHERE rowid = ".((int) $obj->rowid);
2555 $sql .=
" AND enabled = '1'";
2557 $resql2 =
$db->query($sql);
2578 print $langs->trans(
'AlreadyDone').
"<br>\n";
2597 print
'<tr><td colspan="4">';
2600 print
'<b>'.$langs->trans(
'MigrationDeliveryAddress').
"</b><br>\n";
2604 if (
$db->DDLInfoTable(MAIN_DB_PREFIX.
"co_exp")) {
2607 $sql =
"SELECT c.fk_adresse_livraison, ce.fk_expedition";
2608 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande as c";
2609 $sql .=
", ".MAIN_DB_PREFIX.
"co_exp as ce";
2610 $sql .=
" WHERE c.rowid = ce.fk_commande";
2611 $sql .=
" AND c.fk_adresse_livraison IS NOT NULL AND c.fk_adresse_livraison != 0";
2613 $resql =
$db->query($sql);
2616 $num =
$db->num_rows($resql);
2620 $obj =
$db->fetch_object($resql);
2622 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
2623 $sql .=
" fk_adresse_livraison = '".$db->escape($obj->fk_adresse_livraison).
"'";
2624 $sql .=
" WHERE rowid = ".((int) $obj->fk_expedition);
2626 $resql2 =
$db->query($sql);
2635 print $langs->trans(
'AlreadyDone').
"<br>\n";
2648 print $langs->trans(
'AlreadyDone').
"<br>\n";
2667 if ((
$db->type ==
'mysql' ||
$db->type ==
'mysqli')) {
2669 dolibarr_install_syslog(
"upgrade2::migrate_restore_missing_links Version of database too old to make this migrate action");
2673 print
'<tr><td colspan="4">';
2676 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (1)<br>\n";
2682 $table1 =
'facturedet';
2683 $field1 =
'fk_remise_except';
2684 $table2 =
'societe_remise_except';
2685 $field2 =
'fk_facture_line';
2689 $sql =
"SELECT t1.rowid, t1.".$db->sanitize($field1).
" as field";
2690 $sql .=
" FROM ".MAIN_DB_PREFIX.$db->sanitize($table1).
" as t1";
2691 $sql .=
" WHERE t1.".$db->sanitize($field1).
" IS NOT NULL AND t1.".
$db->sanitize($field1).
" NOT IN";
2692 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$db->sanitize($table2).
" as t2";
2693 $sql .=
" WHERE t1.rowid = t2.".$db->sanitize($field2).
")";
2696 $resql =
$db->query($sql);
2699 $num =
$db->num_rows($resql);
2703 $obj =
$db->fetch_object($resql);
2705 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2707 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2708 $sql .=
" ".$db->sanitize($field2).
" = '".
$db->escape($obj->rowid).
"'";
2709 $sql .=
" WHERE rowid = ".((int) $obj->field);
2711 $resql2 =
$db->query($sql);
2720 print $langs->trans(
'AlreadyDone').
"<br>\n";
2736 print
'<tr><td colspan="4">';
2739 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (2)<br>\n";
2742 $table2 =
'facturedet';
2743 $field2 =
'fk_remise_except';
2744 $table1 =
'societe_remise_except';
2745 $field1 =
'fk_facture_line';
2749 $sql =
"SELECT t1.rowid, t1.".$db->sanitize($field1).
" as field";
2750 $sql .=
" FROM ".MAIN_DB_PREFIX.$db->sanitize($table1).
" as t1";
2751 $sql .=
" WHERE t1.".$db->sanitize($field1).
" IS NOT NULL AND t1.".
$db->sanitize($field1).
" NOT IN";
2752 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$db->sanitize($table2).
" as t2";
2753 $sql .=
" WHERE t1.rowid = t2.".$db->sanitize($field2).
")";
2756 $resql =
$db->query($sql);
2759 $num =
$db->num_rows($resql);
2763 $obj =
$db->fetch_object($resql);
2765 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2767 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2768 $sql .=
" ".$db->sanitize($field2).
" = '".
$db->escape($obj->rowid).
"'";
2769 $sql .=
" WHERE rowid = ".((int) $obj->field);
2771 $resql2 =
$db->query($sql);
2780 print $langs->trans(
'AlreadyDone').
"<br>\n";
2795 return ($error ? -1 : 1);
2810 print
'<tr><td colspan="4">';
2813 print
'<b>'.$langs->trans(
'MigrationProjectUserResp').
"</b><br>\n";
2815 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"projet",
"fk_user_resp");
2816 $obj =
$db->fetch_object($result);
2822 $sql =
"SELECT rowid, fk_user_resp FROM ".MAIN_DB_PREFIX.
"projet";
2823 $resql =
$db->query($sql);
2826 $num =
$db->num_rows($resql);
2830 $obj =
$db->fetch_object($resql);
2832 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2833 $sql2 .=
"datecreate";
2834 $sql2 .=
", statut";
2835 $sql2 .=
", element_id";
2836 $sql2 .=
", fk_c_type_contact";
2837 $sql2 .=
", fk_socpeople";
2838 $sql2 .=
") VALUES (";
2839 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2841 $sql2 .=
", ".$obj->rowid;
2843 $sql2 .=
", ".$obj->fk_user_resp;
2846 if ($obj->fk_user_resp > 0) {
2847 $resql2 =
$db->query($sql2);
2860 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"projet DROP COLUMN fk_user_resp";
2861 if (
$db->query($sqlDrop)) {
2874 print $langs->trans(
'AlreadyDone').
"<br>\n";
2891 print
'<tr><td colspan="4">';
2894 print
'<b>'.$langs->trans(
'MigrationProjectTaskActors').
"</b><br>\n";
2896 if (
$db->DDLInfoTable(MAIN_DB_PREFIX.
"projet_task_actors")) {
2901 $sql =
"SELECT fk_projet_task as fk_project_task, fk_user FROM ".MAIN_DB_PREFIX.
"projet_task_actors";
2902 $resql =
$db->query($sql);
2905 $num =
$db->num_rows($resql);
2909 $obj =
$db->fetch_object($resql);
2911 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2912 $sql2 .=
"datecreate";
2913 $sql2 .=
", statut";
2914 $sql2 .=
", element_id";
2915 $sql2 .=
", fk_c_type_contact";
2916 $sql2 .=
", fk_socpeople";
2917 $sql2 .=
") VALUES (";
2918 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2920 $sql2 .=
", ".$obj->fk_project_task;
2922 $sql2 .=
", ".$obj->fk_user;
2925 $resql2 =
$db->query($sql2);
2937 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.
"projet_task_actors";
2938 if (
$db->query($sqlDrop)) {
2951 print $langs->trans(
'AlreadyDone').
"<br>\n";
2971 print
'<tr><td colspan="4">';
2974 print
'<b>'.$langs->trans(
'MigrationRelationshipTables', MAIN_DB_PREFIX.$table).
"</b><br>\n";
2978 if (
$db->DDLInfoTable(MAIN_DB_PREFIX.$table)) {
2983 $sqlSelect =
"SELECT ".$db->sanitize($fk_source).
", ".
$db->sanitize($fk_target);
2984 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.$table;
2986 $resql =
$db->query($sqlSelect);
2989 $num =
$db->num_rows($resql);
2993 $obj =
$db->fetch_object($resql);
2995 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
2996 $sqlInsert .=
"fk_source";
2997 $sqlInsert .=
", sourcetype";
2998 $sqlInsert .=
", fk_target";
2999 $sqlInsert .=
", targettype";
3000 $sqlInsert .=
") VALUES (";
3001 $sqlInsert .= ((int) $obj->$fk_source);
3002 $sqlInsert .=
", '".$db->escape($sourcetype).
"'";
3003 $sqlInsert .=
", ".((int) $obj->$fk_target);
3004 $sqlInsert .=
", '".$db->escape($targettype).
"'";
3007 $result =
$db->query($sqlInsert);
3016 print $langs->trans(
'AlreadyDone').
"<br>\n";
3020 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.$db->sanitize($table);
3021 if (
$db->query($sqlDrop)) {
3034 print $langs->trans(
'AlreadyDone').
"<br>\n";
3052 print
'<tr><td colspan="4">';
3055 print
'<b>'.$langs->trans(
'MigrationProjectTaskTime').
"</b><br>\n";
3061 $sql =
"SELECT rowid, fk_element, element_duration";
3062 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_time";
3063 $resql =
$db->query($sql);
3066 $num =
$db->num_rows($resql);
3069 $totaltime = array();
3073 $obj =
$db->fetch_object($resql);
3075 if ($obj->element_duration > 0) {
3078 list($hour, $min) = explode(
'.', $obj->element_duration);
3079 $hour = (int) $hour * 60 * 60;
3080 $min = (int) ((
float) (
'.'.$min)) * 3600;
3081 $newtime = $hour + $min;
3083 $sql2 =
"UPDATE ".MAIN_DB_PREFIX.
"element_time SET";
3084 $sql2 .=
" element_duration = ".((int) $newtime);
3085 $sql2 .=
" WHERE rowid = ".((int) $obj->rowid);
3087 $resql2 =
$db->query($sql2);
3094 if (!empty($totaltime[$obj->fk_element])) {
3095 $totaltime[$obj->fk_element] += $newtime;
3097 $totaltime[$obj->fk_element] = $newtime;
3100 if (!empty($totaltime[$obj->fk_element])) {
3101 $totaltime[$obj->fk_element] += $obj->element_duration;
3103 $totaltime[$obj->fk_element] = $obj->element_duration;
3112 foreach ($totaltime as $taskid => $total_duration) {
3113 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"projet_task SET";
3114 $sql .=
" duration_effective = ".((int) $total_duration);
3115 $sql .=
" WHERE rowid = ".((int) $taskid);
3117 $resql =
$db->query($sql);
3124 print $langs->trans(
'AlreadyDone').
"<br>\n";
3130 print $langs->trans(
'AlreadyDone').
"<br>\n";
3155 print
'<tr><td colspan="4">';
3158 print
'<b>'.$langs->trans(
'MigrationCustomerOrderShipping').
"</b><br>\n";
3162 $result1 =
$db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"ref_customer");
3163 $result2 =
$db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"date_delivery");
3164 $obj1 =
$db->fetch_object($result1);
3165 $obj2 =
$db->fetch_object($result2);
3166 if (!$obj1 && !$obj2) {
3171 $sqlAdd1 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN ref_customer varchar(30) AFTER entity";
3172 $sqlAdd2 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition";
3174 if (
$db->query($sqlAdd1) &&
$db->query($sqlAdd2)) {
3175 $sqlSelect =
"SELECT e.rowid as shipping_id, c.ref_client, c.date_livraison as delivery_date";
3176 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"expedition as e";
3177 $sqlSelect .=
", ".MAIN_DB_PREFIX.
"element_element as el";
3178 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"commande as c ON c.rowid = el.fk_source AND el.sourcetype = 'commande'";
3179 $sqlSelect .=
" WHERE e.rowid = el.fk_target";
3180 $sqlSelect .=
" AND el.targettype = 'shipping'";
3182 $resql =
$db->query($sqlSelect);
3185 $num =
$db->num_rows($resql);
3189 $obj =
$db->fetch_object($resql);
3191 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
3192 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_client).
"'";
3193 $sqlUpdate .=
", date_delivery = '".$db->escape($obj->delivery_date ? $obj->delivery_date :
'null').
"'";
3194 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->shipping_id);
3196 $result =
$db->query($sqlUpdate);
3205 print $langs->trans(
'AlreadyDone').
"<br>\n";
3223 print $langs->trans(
'AlreadyDone').
"<br>\n";
3239 print
'<tr><td colspan="4">';
3242 print
'<b>'.$langs->trans(
'MigrationShippingDelivery').
"</b><br>\n";
3246 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_expedition");
3247 $obj =
$db->fetch_object($result);
3253 $sqlSelect =
"SELECT rowid, fk_expedition";
3254 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
3255 $sqlSelect .=
" WHERE fk_expedition is not null";
3257 $resql =
$db->query($sqlSelect);
3260 $num =
$db->num_rows($resql);
3264 $obj =
$db->fetch_object($resql);
3266 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
3267 $sqlInsert .=
"fk_source";
3268 $sqlInsert .=
", sourcetype";
3269 $sqlInsert .=
", fk_target";
3270 $sqlInsert .=
", targettype";
3271 $sqlInsert .=
") VALUES (";
3272 $sqlInsert .= $obj->fk_expedition;
3273 $sqlInsert .=
", 'shipping'";
3274 $sqlInsert .=
", ".$obj->rowid;
3275 $sqlInsert .=
", 'delivery'";
3278 $result =
$db->query($sqlInsert);
3280 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET fk_expedition = NULL";
3281 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3283 $result =
$db->query($sqlUpdate);
3296 print $langs->trans(
'AlreadyDone').
"<br>\n";
3300 $sqlDelete =
"DELETE FROM ".MAIN_DB_PREFIX.
"element_element WHERE sourcetype = 'commande' AND targettype = 'delivery'";
3301 $db->query($sqlDelete);
3306 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_expedition";
3307 $db->query($sqlDrop);
3317 print $langs->trans(
'AlreadyDone').
"<br>\n";
3334 print
'<tr><td colspan="4">';
3337 print
'<b>'.$langs->trans(
'MigrationShippingDelivery2').
"</b><br>\n";
3345 $sqlSelect =
"SELECT l.rowid as delivery_id, e.ref_customer, e.date_delivery";
3346 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l,";
3347 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"element_element as el,";
3348 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"expedition as e";
3349 $sqlSelect .=
" WHERE l.rowid = el.fk_target";
3350 $sqlSelect .=
" AND el.targettype = 'delivery'";
3351 $sqlSelect .=
" AND e.rowid = el.fk_source AND el.sourcetype = 'shipping'";
3352 $sqlSelect .=
" AND (e.ref_customer IS NOT NULL OR e.date_delivery IS NOT NULL)";
3354 $sqlSelect .=
" AND (l.ref_customer IS NULL".($db->type !=
'pgsql' ?
" or l.ref_customer = ''" :
"").
")";
3355 $sqlSelect .=
" AND (l.date_delivery IS NULL".($db->type !=
'pgsql' ?
" or l.date_delivery = ''" :
"").
")";
3357 $resql =
$db->query($sqlSelect);
3360 $num =
$db->num_rows($resql);
3364 $obj =
$db->fetch_object($resql);
3366 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
3367 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_customer).
"',";
3368 $sqlUpdate .=
" date_delivery = ".($obj->date_delivery ?
"'".$db->escape($obj->date_delivery).
"'" :
'null');
3369 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->delivery_id);
3371 $result =
$db->query($sqlUpdate);
3380 print $langs->trans(
'AlreadyDone').
"<br>\n";
3407 print
'<tr><td colspan="4">';
3410 print
'<b>'.$langs->trans(
'MigrationActioncommElement').
"</b><br>\n";
3413 'propal' =>
'propalrowid',
3414 'order' =>
'fk_commande',
3415 'invoice' =>
'fk_facture',
3416 'contract' =>
'fk_contract',
3417 'order_supplier' =>
'fk_supplier_order',
3418 'invoice_supplier' =>
'fk_supplier_invoice'
3421 foreach ($elements as $type => $field) {
3422 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"actioncomm", $field);
3423 $obj =
$db->fetch_object($result);
3429 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"actioncomm SET ";
3430 $sql .=
"fk_element = ".$db->sanitize($field).
", elementtype = '".
$db->escape($type).
"'";
3431 $sql .=
" WHERE ".$db->sanitize($field).
" IS NOT NULL";
3432 $sql .=
" AND fk_element IS NULL";
3433 $sql .=
" AND elementtype IS NULL";
3435 $resql =
$db->query($sql);
3449 print $langs->trans(
'AlreadyDone').
"<br>\n";
3466 print
'<tr><td colspan="4">';
3469 print
'<b>'.$langs->trans(
'MigrationPaymentMode').
"</b><br>\n";
3472 'old_id' => array(5, 8, 9, 10, 11),
3473 'new_id' => array(50, 51, 52, 53, 54),
3474 'code' => array(
'VAD',
'TRA',
'LCR',
'FAC',
'PRO'),
3475 'tables' => array(
'commande_fournisseur',
'commande',
'facture_rec',
'facture',
'propal')
3479 foreach ($elements[
'old_id'] as $key => $old_id) {
3484 $sqlSelect =
"SELECT id";
3485 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"c_paiement";
3486 $sqlSelect .=
" WHERE id = ".((int) $old_id);
3487 $sqlSelect .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3489 $resql =
$db->query($sqlSelect);
3491 $num =
$db->num_rows($resql);
3497 $sqla =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET";
3498 $sqla .=
" fk_paiement = ".((int) $elements[
'new_id'][$key]);
3499 $sqla .=
" WHERE fk_paiement = ".((int) $old_id);
3500 $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]).
"')";
3501 $resqla =
$db->query($sqla);
3503 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"c_paiement SET";
3504 $sql .=
" id = ".((int) $elements[
'new_id'][$key]);
3505 $sql .=
" WHERE id = ".((int) $old_id);
3506 $sql .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3507 $resql =
$db->query($sql);
3509 if ($resqla && $resql) {
3510 foreach ($elements[
'tables'] as $table) {
3511 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table).
" SET ";
3512 $sql .=
"fk_mode_reglement = ".((int) $elements[
'new_id'][$key]);
3513 $sql .=
" WHERE fk_mode_reglement = ".((int) $old_id);
3515 $resql =
$db->query($sql);
3538 print $langs->trans(
'AlreadyDone').
"<br>\n";
3556 $result =
$db->DDLDescTable(MAIN_DB_PREFIX.
"categorie_association");
3558 $obj =
$db->fetch_object($result);
3561 $children = array();
3562 $sql =
"SELECT fk_categorie_mere, fk_categorie_fille";
3563 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3565 $resql =
$db->query($sql);
3567 $num =
$db->num_rows($resql);
3568 while ($obj =
$db->fetch_object($resql)) {
3569 if (!isset($children[$obj->fk_categorie_fille])) {
3570 if ($obj->fk_categorie_mere != $obj->fk_categorie_fille) {
3571 $children[$obj->fk_categorie_fille] = 1;
3572 $couples[$obj->fk_categorie_mere.
'_'.$obj->fk_categorie_fille] = array(
'mere' => $obj->fk_categorie_mere,
'fille' => $obj->fk_categorie_fille);
3580 if (count($couples) > 0 && $num > count($couples)) {
3586 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_association";
3588 $resqld =
$db->query($sql);
3591 foreach ($couples as $key => $val) {
3592 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_association(fk_categorie_mere,fk_categorie_fille)";
3593 $sql .=
" VALUES(".((int) $val[
'mere']).
", ".((int) $val[
'fille']).
")";
3595 $resqli =
$db->query($sql);
3603 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3604 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Success").
' ('.$num.
'=>'.count($couples).
')</td></tr>';
3607 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3608 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Failed").
'</td></tr>';
3613 print
'<tr><td>'.$langs->trans(
"Error").
'</td>';
3614 print
'<td class="right"><div class="error">'.$db->lasterror().
'</div></td></tr>';
3631 print
'<tr><td colspan="4">';
3634 print
'<b>'.$langs->trans(
'MigrationCategorieAssociation').
"</b><br>\n";
3638 if (
$db->DDLInfoTable(MAIN_DB_PREFIX.
"categorie_association")) {
3643 $sqlSelect =
"SELECT fk_categorie_mere, fk_categorie_fille";
3644 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3646 $resql =
$db->query($sqlSelect);
3649 $num =
$db->num_rows($resql);
3653 $obj =
$db->fetch_object($resql);
3655 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"categorie SET ";
3656 $sqlUpdate .=
"fk_parent = ".((int) $obj->fk_categorie_mere);
3657 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->fk_categorie_fille);
3659 $result =
$db->query($sqlUpdate);
3668 print $langs->trans(
'AlreadyDone').
"<br>\n";
3681 print $langs->trans(
'AlreadyDone').
"<br>\n";
3697 print
'<tr><td colspan="4">';
3700 print
'<b>'.$langs->trans(
'MigrationEvents').
"</b><br>\n";
3708 $sqlSelect =
"SELECT a.id, a.fk_user_action";
3709 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3710 $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";
3711 $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')";
3712 $sqlSelect .=
" ORDER BY a.id";
3715 $resql =
$db->query($sqlSelect);
3718 $num =
$db->num_rows($resql);
3722 $obj =
$db->fetch_object($resql);
3724 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3725 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'user', ".((int) $obj->fk_user_action).
")";
3727 $result =
$db->query($sqlUpdate);
3736 print $langs->trans(
'AlreadyDone').
"<br>\n";
3763 print
'<tr><td colspan="4">';
3766 print
'<b>'.$langs->trans(
'MigrationEventsContact').
"</b><br>\n";
3774 $sqlSelect =
"SELECT a.id, a.fk_contact";
3775 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3776 $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";
3777 $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')";
3778 $sqlSelect .=
" ORDER BY a.id";
3781 $resql =
$db->query($sqlSelect);
3784 $num =
$db->num_rows($resql);
3788 $obj =
$db->fetch_object($resql);
3790 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3791 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'socpeople', ".((int) $obj->fk_contact).
")";
3793 $result =
$db->query($sqlUpdate);
3802 print $langs->trans(
'AlreadyDone').
"<br>\n";
3832 require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
3834 print
'<tr><td colspan="4">';
3837 print
'<b>'.$langs->trans(
'MigrationResetBlockedLog').
"</b><br>\n";
3845 $sqlSelect =
"SELECT DISTINCT entity";
3846 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"blockedlog";
3850 $resql =
$db->query($sqlSelect);
3853 $num =
$db->num_rows($resql);
3857 $obj =
$db->fetch_object($resql);
3859 print
'Process entity '.$obj->entity;
3861 $sqlSearch =
"SELECT count(rowid) as nb FROM ".MAIN_DB_PREFIX.
"blockedlog WHERE action = 'MODULE_SET' and entity = ".((int) $obj->entity);
3862 $resqlSearch =
$db->query($sqlSearch);
3864 $objSearch =
$db->fetch_object($resqlSearch);
3866 if ($objSearch && $objSearch->nb == 0) {
3867 print
' - Record for entity must be reset...';
3869 $sqlUpdate =
"DELETE FROM ".MAIN_DB_PREFIX.
"blockedlog";
3870 $sqlUpdate .=
" WHERE entity = ".((int) $obj->entity);
3871 $resqlUpdate =
$db->query($sqlUpdate);
3872 if (!$resqlUpdate) {
3881 $object->entity = $obj->entity;
3885 $b->setObjectData(
$object,
'MODULE_SET', 0, $user, 0);
3887 $res = $b->create($user);
3893 print
' - '.$langs->trans(
'AlreadyDone').
'<br>';
3902 print $langs->trans(
'NothingToDo').
"<br>\n";
3929 print
'<tr><td colspan="4">';
3932 print
'<b>'.$langs->trans(
'MigrationRemiseEntity').
"</b><br>\n";
3940 $sqlSelect =
"SELECT sr.rowid, s.entity";
3941 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise as sr, ".MAIN_DB_PREFIX.
"societe as s";
3942 $sqlSelect .=
" WHERE sr.fk_soc = s.rowid and sr.entity != s.entity";
3946 $resql =
$db->query($sqlSelect);
3949 $num =
$db->num_rows($resql);
3953 $obj =
$db->fetch_object($resql);
3955 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise SET";
3956 $sqlUpdate .=
" entity = ".$obj->entity;
3957 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3959 $result =
$db->query($sqlUpdate);
3969 print $langs->trans(
'AlreadyDone').
"<br>\n";
3995 print
'<tr><td colspan="4">';
3998 print
'<b>'.$langs->trans(
'MigrationRemiseExceptEntity').
"</b><br>\n";
4006 $sqlSelect =
"SELECT sr.rowid, sr.fk_soc, sr.fk_facture_source, sr.fk_facture, sr.fk_facture_line";
4007 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as sr";
4010 $resql =
$db->query($sqlSelect);
4013 $num =
$db->num_rows($resql);
4017 $obj =
$db->fetch_object($resql);
4019 if (!empty($obj->fk_facture_source) || !empty($obj->fk_facture)) {
4020 $fk_facture = (!empty($obj->fk_facture_source) ? $obj->fk_facture_source : $obj->fk_facture);
4022 $sqlSelect2 =
"SELECT f.entity";
4023 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f";
4024 $sqlSelect2 .=
" WHERE f.rowid = ".((int) $fk_facture);
4025 } elseif (!empty($obj->fk_facture_line)) {
4026 $sqlSelect2 =
"SELECT f.entity";
4027 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f, ".MAIN_DB_PREFIX.
"facturedet as fd";
4028 $sqlSelect2 .=
" WHERE fd.rowid = ".((int) $obj->fk_facture_line);
4029 $sqlSelect2 .=
" AND fd.fk_facture = f.rowid";
4031 $sqlSelect2 =
"SELECT s.entity";
4032 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
4033 $sqlSelect2 .=
" WHERE s.rowid = ".((int) $obj->fk_soc);
4036 $resql2 =
$db->query($sqlSelect2);
4038 if (
$db->num_rows($resql2) > 0) {
4039 $obj2 =
$db->fetch_object($resql2);
4041 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise_except SET";
4042 $sqlUpdate .=
" entity = ".((int) $obj2->entity);
4043 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
4045 $result =
$db->query($sqlUpdate);
4060 print $langs->trans(
'AlreadyDone').
"<br>\n";
4087 print
'<tr><td colspan="4">';
4089 print
'<b>'.$langs->trans(
'MigrationUserRightsEntity').
"</b><br>\n";
4097 $sqlSelect =
"SELECT u.rowid, u.entity";
4098 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"user as u";
4099 $sqlSelect .=
" WHERE u.entity > 1";
4102 $resql =
$db->query($sqlSelect);
4105 $num =
$db->num_rows($resql);
4109 $obj =
$db->fetch_object($resql);
4111 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"user_rights SET";
4112 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4113 $sqlUpdate .=
" WHERE fk_user = ".((int) $obj->rowid);
4115 $result =
$db->query($sqlUpdate);
4125 print $langs->trans(
'AlreadyDone').
"<br>\n";
4152 print
'<tr><td colspan="4">';
4154 print
'<b>'.$langs->trans(
'MigrationUserGroupRightsEntity').
"</b><br>\n";
4162 $sqlSelect =
"SELECT u.rowid, u.entity";
4163 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"usergroup as u";
4164 $sqlSelect .=
" WHERE u.entity > 1";
4167 $resql =
$db->query($sqlSelect);
4170 $num =
$db->num_rows($resql);
4174 $obj =
$db->fetch_object($resql);
4176 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"usergroup_rights SET";
4177 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4178 $sqlUpdate .=
" WHERE fk_usergroup = ".((int) $obj->rowid);
4180 $result =
$db->query($sqlUpdate);
4190 print $langs->trans(
'AlreadyDone').
"<br>\n";
4221 if (is_dir(DOL_DATA_ROOT.$oldname) && !file_exists(DOL_DATA_ROOT.$newname)) {
4222 dolibarr_install_syslog(
"upgrade2::migrate_rename_directories move ".DOL_DATA_ROOT.$oldname.
' into '.DOL_DATA_ROOT.$newname);
4223 @rename(DOL_DATA_ROOT.$oldname, DOL_DATA_ROOT.$newname);
4226 dolCopyDir(DOL_DATA_ROOT.$oldname, DOL_DATA_ROOT.$newname,
'0', 1);
4246 $filetodeletearray = array(
4247 '/core/ajax/ajaxcompanies.php',
4248 '/core/triggers/interface_demo.class.php',
4249 '/core/menus/barre_left/default.php',
4250 '/core/menus/barre_top/default.php',
4251 '/core/modules/modComptabiliteExpert.class.php',
4252 '/core/modules/modCommercial.class.php',
4253 '/core/modules/modPaybox.class.php',
4254 '/core/modules/modProduit.class.php',
4255 '/core/modules/modSkype.class.php',
4256 '/core/modules/modactivite.class.php',
4257 '/core/triggers/interface_modWebcalendar_Webcalsynchro.class.php',
4258 '/core/triggers/interface_modCommande_Ecotax.class.php',
4259 '/core/triggers/interface_modCommande_fraisport.class.php',
4260 '/core/triggers/interface_modPropale_PropalWorkflow.class.php',
4261 '/core/triggers/interface_50_modBlockedlog_ActionsBlockedLog.class.php',
4262 '/core/triggers/interface_99_modWebhook_WebhookTriggers.class.php',
4263 '/core/triggers/interface_99_modZapier_ZapierTriggers.class.php',
4264 '/core/menus/smartphone/iphone.lib.php',
4265 '/core/menus/smartphone/iphone_backoffice.php',
4266 '/core/menus/smartphone/iphone_frontoffice.php',
4267 '/core/menus/standard/auguria_backoffice.php',
4268 '/core/menus/standard/auguria_frontoffice.php',
4269 '/core/menus/standard/eldy_backoffice.php',
4270 '/core/menus/standard/eldy_frontoffice.php',
4271 '/core/modules/export/export_excel.modules.php',
4272 '/core/modules/export/export_csv.modules.php',
4273 '/core/modules/export/exportcsv.modules.php',
4274 '/core/modules/export/export_excel2007new.modules.php',
4275 '/core/modules/facture/pdf_crabe.modules.php',
4276 '/core/modules/facture/pdf_oursin.modules.php',
4277 '/core/modules/mailings/contacts2.modules.php',
4278 '/core/modules/mailings/contacts3.modules.php',
4279 '/core/modules/mailings/contacts4.modules.php',
4280 '/core/modules/mailings/framboise.modules.php',
4281 '/core/modules/mailings/dolibarr_services_expired.modules.php',
4282 '/core/modules/mailings/peche.modules.php',
4283 '/core/modules/mailings/poire.modules.php',
4284 '/core/modules/mailings/kiwi.modules.php',
4285 '/core/modules/syslog/mod_syslog_chromephp.php',
4286 '/core/modules/syslog/mod_syslog_firephp.php',
4287 '/core/modules/syslog/logHandlerInterface.php',
4288 '/core/boxes/box_members.php',
4290 '/includes/restler/framework/Luracast/Restler/Data/Object.php',
4291 '/includes/nusoap/lib/class.*',
4292 '/phenix/inc/triggers/interface_modPhenix_Phenixsynchro.class.php',
4293 '/webcalendar/inc/triggers/interface_modWebcalendar_webcalsynchro.class.php',
4295 '/api/class/api_generic.class.php',
4296 '/asterisk/cidlookup.php',
4297 '/categories/class/api_category.class.php',
4298 '/categories/class/api_deprecated_category.class.php',
4299 '/compta/facture/class/api_invoice.class.php',
4300 '/commande/class/api_commande.class.php',
4301 '/partnership/class/api_partnership.class.php',
4302 '/product/class/api_product.class.php',
4303 '/recruitment/class/api_recruitment.class.php',
4304 '/societe/class/api_contact.class.php',
4305 '/societe/class/api_thirdparty.class.php',
4306 '/support/online.php',
4307 '/takepos/class/actions_takepos.class.php',
4308 '/user/class/api_user.class.php',
4310 '/install/mysql/tables/llx_c_ticketsup_category.key.sql',
4311 '/install/mysql/tables/llx_c_ticketsup_category.sql',
4312 '/install/mysql/tables/llx_c_ticketsup_severity.key.sql',
4313 '/install/mysql/tables/llx_c_ticketsup_severity.sql',
4314 '/install/mysql/tables/llx_c_ticketsup_type.key.sql',
4315 '/install/mysql/tables/llx_c_ticketsup_type.sql'
4324 foreach ($filetodeletearray as $filetodelete) {
4326 if (preg_match(
'/\*/', $filetodelete) || file_exists(DOL_DOCUMENT_ROOT.$filetodelete)) {
4328 $result =
dol_delete_file(DOL_DOCUMENT_ROOT.$filetodelete, 0, (preg_match(
'/\*/', $filetodelete) ? 1 : 0), 0,
null,
true, 0);
4330 $langs->load(
"errors");
4331 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteFile", DOL_DOCUMENT_ROOT.$filetodelete);
4332 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4357 $filetodeletearray = array(
4358 DOL_DOCUMENT_ROOT.
'/core/modules/facture/terre',
4359 DOL_DOCUMENT_ROOT.
'/core/modules/facture/mercure',
4363 if (!empty($_SERVER[
"WINDIR"])) {
4364 $filetodeletearray[] = DOL_DOCUMENT_ROOT.
'/includes/phpoffice/PhpSpreadsheet';
4367 foreach ($filetodeletearray as $filetodelete) {
4369 if (file_exists($filetodelete)) {
4373 $langs->load(
"errors");
4374 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteDir", $filetodelete);
4375 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4399 if (count($listofmodule) == 0) {
4403 if (!is_object($user)) {
4404 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4408 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules force=".$force.
", listofmodule=".implode(
',', array_keys($listofmodule)), LOG_NOTICE);
4410 $reloadactionformodules = array(
4411 'MAIN_MODULE_AGENDA' => array(
'class' =>
'modAgenda',
'remove' => 1),
4412 'MAIN_MODULE_API' => array(
'class' =>
'modApi'),
4413 'MAIN_MODULE_BARCODE' => array(
'class' =>
'modBarcode',
'remove' => 1),
4414 'MAIN_MODULE_BLOCKEDLOG' => array(
'class' =>
'modBlockedLog',
'deleteinsertmenus' => 1),
4415 'MAIN_MODULE_CRON' => array(
'class' =>
'modCron',
'remove' => 1),
4416 'MAIN_MODULE_SOCIETE' => array(
'class' =>
'modSociete',
'remove' => 1),
4417 'MAIN_MODULE_PRODUIT' => array(
'class' =>
'modProduct'),
4418 'MAIN_MODULE_SERVICE' => array(
'class' =>
'modService'),
4419 'MAIN_MODULE_COMMANDE' => array(
'class' =>
'modCommande'),
4420 'MAIN_MODULE_DON' => array(
'class' =>
'modDon'),
4421 'MAIN_MODULE_FACTURE' => array(
'class' =>
'modFacture'),
4422 'MAIN_MODULE_FICHEINTER' => array(
'class' =>
'modFicheinter'),
4423 'MAIN_MODULE_FOURNISSEUR' => array(
'class' =>
'modFournisseur'),
4424 'MAIN_MODULE_EXPEDITION' => array(
'class' =>
'modExpedition'),
4425 'MAIN_MODULE_EXPENSEREPORT' => array(
'class' =>
'modExpenseReport'),
4426 'MAIN_MODULE_EVENTORGANIZATION' => array(
'class' =>
'modEventOrganization',
'remove' => 1),
4427 'MAIN_MODULE_ECM' => array(
'class' =>
'modECM',
'remove' => 1),
4428 'MAIN_MODULE_HOLIDAY' => array(
'class' =>
'modHoliday',
'remove' => 1),
4429 'MAIN_MODULE_KNOWLEDGEMANAGEMENT' => array(
'class' =>
'modKnowledgeManagement',
'remove' => 1),
4430 'MAIN_MODULE_LOAN' => array(
'class' =>
'modLoan',
'remove' => 1),
4431 'MAIN_MODULE_PROPAL' => array(
'class' =>
'modPropale'),
4432 'MAIN_MODULE_SUPPLIERPROPOSAL' => array(
'class' =>
'modSupplierProposal',
'remove' => 1),
4433 'MAIN_MODULE_OPENSURVEY' => array(
'class' =>
'modOpenSurvey',
'remove' => 1),
4434 'MAIN_MODULE_PRODUCTBATCH' => array(
'class' =>
'modProductBatch',
'remove' => 1),
4435 'MAIN_MODULE_TAKEPOS' => array(
'class' =>
'modTakePos',
'remove' => 1),
4436 'MAIN_MODULE_VARIANTS' => array(
'class' =>
'modVariants',
'remove' => 1),
4437 'MAIN_MODULE_EMAILCOLLECTOR' => array(
'class' =>
'modEmailCollector',
'remove' => 1),
4440 foreach ($listofmodule as $moduletoreload => $reloadmode) {
4441 $modulekey = preg_replace(
'/^MAIN_MODULE_/',
'', $moduletoreload);
4443 if (empty($moduletoreload) || (!
isModEnabled(strtolower($modulekey)) && !$force)) {
4449 if (!empty($reloadactionformodules[$moduletoreload])) {
4450 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreload.
" with mode ".$reloadmode);
4452 $val = $reloadactionformodules[$moduletoreload];
4453 $classformodule = $val[
'class'];
4454 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/'.$classformodule.
'.class.php';
4456 $mod =
new $classformodule(
$db);
4457 if (!empty($val[
'remove'])) {
4458 $mod->remove(
'noboxes');
4460 if (!empty($val[
'deleteinsertmenus'])) {
4462 $mod->delete_menus();
4463 $mod->insert_menus();
4465 $mod->init($reloadmode);
4470 preg_match(
'/([a-zA-Z0-9]+)/', $modulekey, $reg);
4471 if (!empty($reg[1])) {
4472 if (strtoupper($moduletoreload) == $moduletoreload) {
4473 $moduletoreloadshort = ucfirst(strtolower($reg[1]));
4475 $moduletoreloadshort = $reg[1];
4478 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreloadshort.
" with mode ".$reloadmode.
" (generic code)", LOG_NOTICE);
4480 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php';
4482 $classname =
'mod'.$moduletoreloadshort;
4483 $mod =
new $classname(
$db);
4484 '@phan-var-force DolibarrModules $mod';
4487 $mod->delete_menus();
4488 $mod->init($reloadmode);
4490 dolibarr_install_syslog(
'Failed to include '.DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4492 $res = @
dol_include_once(strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4494 $classname =
'mod'.$moduletoreloadshort;
4495 $mod =
new $classname(
$db);
4496 '@phan-var-force DolibarrModules $mod';
4497 $mod->init($reloadmode);
4499 dolibarr_install_syslog(
'Failed to include '.strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4500 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4506 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4511 if (!empty($mod) && is_object($mod)) {
4512 print
'<tr class="trforrunsql"><td colspan="4">';
4513 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: ';
4514 print $langs->trans(
'MigrationReloadModule').
' '.$mod->getName();
4515 print
"<!-- (".$reloadmode.
") -->";
4540 $listofmenuhandler = array();
4543 $listofmenuhandler[
'auguria'] = 1;
4546 foreach ($listofmenuhandler as $key => $val) {
4547 print
'<tr class="trforrunsql"><td colspan="4">';
4551 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: '.$langs->trans(
'MenuHandler').
" ".$key.
"<br>\n";
4554 $dir = DOL_DOCUMENT_ROOT.
"/core/menus/";
4555 $file =
'init_menu_'.$key.
'.sql';
4556 if (file_exists($dir.$file)) {
4557 $result =
run_sql($dir.$file, 1, 0, 1, $key);
4575 if (!is_object($user)) {
4576 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4580 print
'<tr><td colspan="4">';
4582 print
'<b>'.$langs->trans(
'MigrationProductLotPath').
"</b><br>\n";
4584 $sql =
"SELECT rowid, entity, batch, fk_product from ".MAIN_DB_PREFIX.
"product_lot";
4585 $resql =
$db->query($sql);
4588 $modulepart =
"product_batch";
4592 while ($obj =
$db->fetch_object($resql)) {
4593 $entity = (empty($obj->entity) ? 1 : $obj->entity);
4595 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/'.
$conf->productbatch->multidir_output[$entity];
4597 $dir =
$conf->productbatch->multidir_output[$entity];
4601 $lot->id = (int) $obj->rowid;
4602 $lot->ref = (
string) $obj->rowid;
4603 $lot->batch = $obj->batch;
4604 $lot->entity = $obj->entity;
4605 $lot->fk_product = $obj->fk_product;
4607 $savref = $lot->ref;
4609 $lot->ref = $obj->batch;
4610 $origin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4612 $lot->ref = $savref;
4613 $destin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4637 print
'<tr><td colspan="4">';
4639 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4641 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4643 if (!is_object($user)) {
4647 $sql =
"SELECT rowid as uid, entity from ".MAIN_DB_PREFIX.
"user";
4648 $resql =
$db->query($sql);
4650 while ($obj =
$db->fetch_object($resql)) {
4652 $fuser->id = $obj->uid;
4653 $fuser->entity = $obj->entity;
4656 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4658 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4660 $dir =
$conf->user->multidir_output[$entity];
4665 $origin = $dir.
'/'.
get_exdir($fuser->id, 2, 0, 1, $fuser,
'user');
4666 $destin = $dir.
'/'.$fuser->id;
4674 $handle = opendir($origin_osencoded);
4675 if (is_resource($handle)) {
4676 while (($file = readdir($handle)) !==
false) {
4677 if ($file ==
'.' || $file ==
'..') {
4682 $thumbs = opendir($origin_osencoded.
'/'.$file);
4683 if (is_resource($thumbs)) {
4685 while (($thumb = readdir($thumbs)) !==
false) {
4687 if ($thumb ==
'.' || $thumb ==
'..') {
4693 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4703 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4724 global
$db, $langs, $user;
4726 print
'<tr><td colspan="4">';
4728 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4730 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4732 if (!is_object($user)) {
4736 $sql =
"SELECT rowid as uid, entity, photo from ".MAIN_DB_PREFIX.
"user";
4737 $resql =
$db->query($sql);
4739 while ($obj =
$db->fetch_object($resql)) {
4741 $fuser->id = $obj->uid;
4742 $fuser->entity = $obj->entity;
4743 $fuser->photo = $obj->photo;
4746 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4748 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4750 $dir = DOL_DATA_ROOT.
'/users';
4755 $origin = $dir.
'/'.$fuser->id;
4756 $destin = $dir.
'/'.$fuser->id.
'/photos';
4764 $handle = opendir($origin_osencoded);
4765 if (is_resource($handle)) {
4766 while (($file = readdir($handle)) !==
false) {
4767 if ($file ==
'.' || $file ==
'..' || $file ==
'photos') {
4770 if (!empty($fuser->photo) && ($file != $fuser->photo && $file !=
'thumbs')) {
4775 $thumbs = opendir($origin_osencoded.
'/'.$file);
4776 if (is_resource($thumbs)) {
4778 while (($thumb = readdir($thumbs)) !==
false) {
4780 if ($thumb ==
'.' || $thumb ==
'..') {
4786 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4795 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4819 print
'<tr class="trforrunsql"><td>';
4821 print
'<b>'.$langs->trans(
'MigrationHolidayPath').
"</b><br>\n";
4823 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
4826 $sql =
"SELECT rowid as uid, ref, entity from ".MAIN_DB_PREFIX.
"holiday";
4828 $resql =
$db->query($sql);
4830 while ($obj =
$db->fetch_object($resql)) {
4832 $holiday->id = $obj->uid;
4833 $holiday->ref = $obj->ref;
4834 $holiday->entity = $obj->entity;
4837 $entity = (empty($holiday->entity) ? 1 : $holiday->entity);
4839 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/holiday';
4841 $dir =
$conf->holiday->multidir_output[$entity];
4846 $origin = $dir.
'/'.
get_exdir($holiday->id, 2, 0, 1, $holiday,
'holiday');
4847 $destin = $dir.
'/'.$holiday->ref;
4855 $handle = opendir($origin_osencoded);
4856 if (is_resource($handle)) {
4857 while (($file = readdir($handle)) !==
false) {
4858 if ($file ==
'.' || $file ==
'..') {
4863 $thumbs = opendir($origin_osencoded.
'/'.$file);
4864 if (is_resource($thumbs)) {
4866 while (($thumb = readdir($thumbs)) !==
false) {
4868 if ($thumb ==
'.' || $thumb ==
'..') {
4874 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4884 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4921 print
'<tr><td colspan="4">';
4922 $sql =
'SELECT rowid, socialnetworks';
4923 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'user WHERE';
4924 $sql .=
" skype IS NOT NULL OR skype <> ''";
4925 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4926 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4927 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4928 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4929 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4930 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4931 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4932 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4934 $resql =
$db->query($sql);
4936 while ($obj =
$db->fetch_object($resql)) {
4937 $arraysocialnetworks = array();
4938 if (!empty($obj->skype)) {
4939 $arraysocialnetworks[
'skype'] = $obj->skype;
4941 if (!empty($obj->twitter)) {
4942 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4944 if (!empty($obj->facebook)) {
4945 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4947 if (!empty($obj->linkedin)) {
4948 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4950 if (!empty($obj->instagram)) {
4951 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4953 if (!empty($obj->snapchat)) {
4954 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4956 if (!empty($obj->googleplus)) {
4957 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4959 if (!empty($obj->youtube)) {
4960 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4962 if (!empty($obj->whatsapp)) {
4963 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4965 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4966 $obj->socialnetworks =
'[]';
4968 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4969 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"user SET socialnetworks='".
$db->escape(json_encode($socialnetworks)).
"'";
4970 $sqlupd .=
', skype=null';
4971 $sqlupd .=
', twitter=null';
4972 $sqlupd .=
', facebook=null';
4973 $sqlupd .=
', linkedin=null';
4974 $sqlupd .=
', instagram=null';
4975 $sqlupd .=
', snapchat=null';
4976 $sqlupd .=
', googleplus=null';
4977 $sqlupd .=
', youtube=null';
4978 $sqlupd .=
', whatsapp=null';
4979 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4981 $resqlupd =
$db->query($sqlupd);
4996 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Users').
"</b><br>\n";
5010 print
'<tr><td colspan="4">';
5013 print
'<tr><td colspan="4">';
5014 $sql =
'SELECT rowid, socialnetworks';
5015 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'adherent WHERE ';
5016 $sql .=
" skype IS NOT NULL OR skype <> ''";
5017 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5018 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5019 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5020 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5021 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5022 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5023 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5024 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5026 $resql =
$db->query($sql);
5028 while ($obj =
$db->fetch_object($resql)) {
5029 $arraysocialnetworks = array();
5030 if (!empty($obj->skype)) {
5031 $arraysocialnetworks[
'skype'] = $obj->skype;
5033 if (!empty($obj->twitter)) {
5034 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5036 if (!empty($obj->facebook)) {
5037 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5039 if (!empty($obj->linkedin)) {
5040 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5042 if (!empty($obj->instagram)) {
5043 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5045 if (!empty($obj->snapchat)) {
5046 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5048 if (!empty($obj->googleplus)) {
5049 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5051 if (!empty($obj->youtube)) {
5052 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5054 if (!empty($obj->whatsapp)) {
5055 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5057 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5058 $obj->socialnetworks =
'[]';
5060 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5061 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"adherent SET socialnetworks='".
$db->escape(json_encode($socialnetworks)).
"'";
5062 $sqlupd .=
', skype=null';
5063 $sqlupd .=
', twitter=null';
5064 $sqlupd .=
', facebook=null';
5065 $sqlupd .=
', linkedin=null';
5066 $sqlupd .=
', instagram=null';
5067 $sqlupd .=
', snapchat=null';
5068 $sqlupd .=
', googleplus=null';
5069 $sqlupd .=
', youtube=null';
5070 $sqlupd .=
', whatsapp=null';
5071 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5073 $resqlupd =
$db->query($sqlupd);
5088 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Members').
"</b><br>\n";
5104 print
'<tr><td colspan="4">';
5105 $sql =
'SELECT rowid, socialnetworks';
5106 $sql .=
', jabberid, skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'socpeople WHERE';
5107 $sql .=
" jabberid IS NOT NULL OR jabberid <> ''";
5108 $sql .=
" OR skype IS NOT NULL OR skype <> ''";
5109 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5110 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5111 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5112 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5113 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5114 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5115 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5116 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5118 $resql =
$db->query($sql);
5120 while ($obj =
$db->fetch_object($resql)) {
5121 $arraysocialnetworks = array();
5122 if (!empty($obj->jabberid)) {
5123 $arraysocialnetworks[
'jabber'] = $obj->jabberid;
5125 if (!empty($obj->skype)) {
5126 $arraysocialnetworks[
'skype'] = $obj->skype;
5128 if (!empty($obj->twitter)) {
5129 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5131 if (!empty($obj->facebook)) {
5132 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5134 if (!empty($obj->linkedin)) {
5135 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5137 if (!empty($obj->instagram)) {
5138 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5140 if (!empty($obj->snapchat)) {
5141 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5143 if (!empty($obj->googleplus)) {
5144 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5146 if (!empty($obj->youtube)) {
5147 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5149 if (!empty($obj->whatsapp)) {
5150 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5152 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5153 $obj->socialnetworks =
'[]';
5155 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5156 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"socpeople SET socialnetworks='".
$db->escape(json_encode($socialnetworks)).
"'";
5157 $sqlupd .=
', jabberid=null';
5158 $sqlupd .=
', skype=null';
5159 $sqlupd .=
', twitter=null';
5160 $sqlupd .=
', facebook=null';
5161 $sqlupd .=
', linkedin=null';
5162 $sqlupd .=
', instagram=null';
5163 $sqlupd .=
', snapchat=null';
5164 $sqlupd .=
', googleplus=null';
5165 $sqlupd .=
', youtube=null';
5166 $sqlupd .=
', whatsapp=null';
5167 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5169 $resqlupd =
$db->query($sqlupd);
5184 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Contacts').
"</b><br>\n";
5200 print
'<tr><td colspan="4">';
5201 $sql =
'SELECT rowid, socialnetworks';
5202 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'societe WHERE ';
5203 $sql .=
" skype IS NOT NULL OR skype <> ''";
5204 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5205 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5206 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5207 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5208 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5209 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5210 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5211 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5213 $resql =
$db->query($sql);
5215 while ($obj =
$db->fetch_object($resql)) {
5216 $arraysocialnetworks = array();
5217 if (!empty($obj->skype)) {
5218 $arraysocialnetworks[
'skype'] = $obj->skype;
5220 if (!empty($obj->twitter)) {
5221 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5223 if (!empty($obj->facebook)) {
5224 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5226 if (!empty($obj->linkedin)) {
5227 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5229 if (!empty($obj->instagram)) {
5230 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5232 if (!empty($obj->snapchat)) {
5233 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5235 if (!empty($obj->googleplus)) {
5236 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5238 if (!empty($obj->youtube)) {
5239 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5241 if (!empty($obj->whatsapp)) {
5242 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5244 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5245 $obj->socialnetworks =
'[]';
5247 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5248 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"societe SET socialnetworks='".
$db->escape(json_encode($socialnetworks)).
"'";
5249 $sqlupd .=
', skype=null';
5250 $sqlupd .=
', twitter=null';
5251 $sqlupd .=
', facebook=null';
5252 $sqlupd .=
', linkedin=null';
5253 $sqlupd .=
', instagram=null';
5254 $sqlupd .=
', snapchat=null';
5255 $sqlupd .=
', googleplus=null';
5256 $sqlupd .=
', youtube=null';
5257 $sqlupd .=
', whatsapp=null';
5258 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5260 $resqlupd =
$db->query($sqlupd);
5275 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Thirdparties').
"</b><br>\n";
5295 print
'<tr class="trforrunsql"><td colspan="4">';
5296 $sql =
'SELECT rowid, field';
5297 if ($mode ==
'export') {
5300 $sql .=
' FROM '.MAIN_DB_PREFIX.$mode.
'_model WHERE';
5301 $sql .=
" type LIKE 'propale_%' OR type LIKE 'commande_%' OR type LIKE 'facture_%'";
5303 $resql =
$db->query($sql);
5305 while ($obj =
$db->fetch_object($resql)) {
5306 $oldfield = $obj->field;
5307 $newfield = str_replace(array(
',f.facnumber',
'f.facnumber,',
'f.total,',
'f.tva,'), array(
',f.ref',
'f.ref,',
'f.total_ht,',
'f.total_tva,'), $oldfield);
5309 if ($mode ==
'export') {
5310 $oldfilter = $obj->filter;
5311 $newfilter = str_replace(array(
'f.facnumber=',
'f.total=',
'f.tva='), array(
'f.ref=',
'f.total_ht=',
'f.total_tva='), $oldfilter);
5317 if ($oldfield != $newfield || $oldfilter != $newfilter) {
5318 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.$mode.
"_model SET field = '".
$db->escape($newfield).
"'";
5319 if ($mode ==
'export') {
5320 $sqlupd .=
", filter = '".$db->escape($newfilter).
"'";
5322 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5323 $resultstring .=
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$sqlupd.
"</td></tr>\n";
5324 $resqlupd =
$db->query($sqlupd);
5340 print
'<b>'.$langs->trans(
'MigrationImportOrExportProfiles', $mode).
"</b><br>\n";
5343 if ($resultstring) {
5344 print $resultstring;
5346 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5363 print
'<tr class="trforrunsql"><td colspan="4">';
5364 print
'<b>'.$langs->trans(
'MigrationContractLineRank').
"</b><br>\n";
5366 $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";
5367 $sql .=
" ORDER BY c.rowid,cd.rowid";
5369 $resql =
$db->query($sql);
5372 $current_contract = 0;
5373 while ($obj =
$db->fetch_object($resql)) {
5374 if (empty($current_contract) || $current_contract == $obj->cid) {
5380 $sqlUpd =
"UPDATE ".$db->prefix().
"contratdet SET rang=".(int) $currentRank.
" WHERE rowid=".(
int) $obj->cdid;
5381 $resultstring =
'.';
5382 print $resultstring;
5383 $resqlUpd =
$db->query($sqlUpd);
5389 $current_contract = $obj->cid;
5402 if (!$resultstring) {
5403 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5418 $firstInstallVersion =
getDolGlobalString(
'MAIN_VERSION_FIRST_INSTALL', DOL_VERSION);
5419 $migrationNeeded = (
versioncompare(explode(
'.', $firstInstallVersion, 3), array(20, 0, -5)) < 0 && !$lock);
5421 print
'<tr class="trforrunsql"><td colspan="4">';
5422 print
'<b>'.$langs->trans(
'InvoiceExportModelsMigration').
"</b>: \n";
5424 if (! $migrationNeeded) {
5425 print $langs->trans(
"AlreadyDone");
5427 dolibarr_set_const(
$db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5434 $sql1 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_0' WHERE type = 'facture_1'";
5436 $resql1 =
$db->query($sql1);
5445 $modified1 =
$db->affected_rows($resql1);
5447 print str_repeat(
'.', $modified1);
5451 $sql2 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_1' WHERE type = 'facture_2'";
5453 $resql2 =
$db->query($sql2);
5462 $modified2 =
$db->affected_rows($resql2);
5464 print str_repeat(
'.', $modified2);
5468 if (empty($modified1 + $modified2)) {
5469 print $langs->trans(
'NothingToDo');
5474 dolibarr_set_const(
$db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5491 $bookKeepingAddon =
'';
5496 $bookKeepingAddon =
'mod_bookkeeping_neon';
5499 print
'<tr class="trforrunsql"><td colspan="4">';
5500 print
'<b>'.$langs->trans(
'MigrationAccountancyBookkeeping').
"</b><br>\n";
5503 if ($bookKeepingAddon ===
'mod_bookkeeping_argon') {
5506 $sql =
"SELECT DISTINCT YEAR(doc_date) as doc_year, MONTH(doc_date) as doc_month, code_journal, piece_num FROM ".$db->prefix().
"accounting_bookkeeping";
5507 $sql .=
" WHERE ref IS NULL AND entity = ".((int) $entity);
5508 $sql .=
" ORDER BY doc_year, doc_month, code_journal, piece_num";
5510 $resql =
$db->query($sql);
5512 require_once DOL_DOCUMENT_ROOT .
'/accountancy/class/bookkeeping.class.php';
5515 while ($obj =
$db->fetch_object($resql)) {
5516 $bookkeeping->doc_date =
dol_mktime(0, 0, 0, $obj->doc_month, 1, $obj->doc_year);
5517 $bookkeeping->code_journal = $obj->code_journal;
5518 $ref = $bookkeeping->getNextNumRef();
5520 $sqlUpd =
"UPDATE ".$db->prefix().
"accounting_bookkeeping SET ref = '".
$db->escape($ref).
"' WHERE piece_num = '".
$db->escape($obj->piece_num).
"' AND entity = ".((int) $entity);
5521 $resultstring =
'.';
5522 print $resultstring;
5523 $resqlUpd =
$db->query($sqlUpd);
5542 if (!$resultstring) {
5543 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5556 print
'<tr class="trforrunsql"><td colspan="4">';
5557 print
'<b>'.$langs->trans(
'MigrationApiRestTokens').
"</b>:\n";
5561 $allexistingtokens = array();
5565 $sqlforalltokens =
"SELECT oat.tokenstring";
5566 $sqlforalltokens .=
" FROM ".$db->prefix().
"oauth_token AS oat";
5567 $sqlforalltokens .=
" WHERE oat.service = 'dolibarr_rest_api'";
5569 $resalltoken =
$db->query($sqlforalltokens);
5572 while ($tokenobj =
$db->fetch_object($resalltoken)) {
5573 $allexistingtokens[] =
dolDecrypt($tokenobj->tokenstring);
5582 $sql =
"SELECT 'dolibarr_rest_api' AS service, u.api_key AS tokenstring, u.rowid AS fk_user, u.entity";
5583 $sql .=
" FROM llx_user AS u";
5584 $sql .=
" WHERE u.api_key IS NOT NULL AND u.api_key <> ''";
5586 $result =
$db->query($sql);
5591 while ($obj =
$db->fetch_object($result)) {
5592 if (!in_array(
dolDecrypt($obj->tokenstring), $allexistingtokens)) {
5594 unset($tmpuser->conf);
5596 $tmpuser->fetch((
int) $obj->fk_user,
'',
'', 1, ($obj->entity ? $obj->entity :
$conf->entity));
5598 $sqlforinsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"oauth_token (service, tokenstring, fk_user, datec, entity, apicount_total)";
5599 $sqlforinsert .=
" VALUES ('".$db->escape($obj->service).
"', '".
$db->escape(
dolEncrypt(
dolDecrypt($obj->tokenstring))).
"', ";
5600 $sqlforinsert .= ((int) $obj->fk_user).
", '".
$db->idate(
dol_now()).
"', ".((
int) $obj->entity).
", ";
5601 $sqlforinsert .=
getDolUserInt(
'API_COUNT_CALL', 0, $tmpuser);
5602 $sqlforinsert .=
")";
5604 $insertresult =
$db->query($sqlforinsert);
5605 if (!$insertresult) {
5625 if (!$nbofmigration) {
5626 print $langs->trans(
"NothingToDo").
"\n";
5628 print $langs->trans(
'MigratedTokens', $nbofmigration);
5645 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security.lib.php';
5646 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
5648 print
'<tr class="trforrunsql"><td colspan="4">';
5649 print
'<b>'.$langs->trans(
'InitAHMACKeyForBlockedLog').
"</b>:\n";
5655 if (empty($hmac_encoded_secret_key)) {
5657 $randomsecret = bin2hex(random_bytes(32));
5659 $hmac_secret_key =
'BLOCKEDLOGHMAC'.$randomsecret;
5661 $result =
dolibarr_set_const(
$db,
'BLOCKEDLOG_HMAC_KEY', $hmac_secret_key,
'chaine', 0,
'The secret key for HMAC used for blockedlog record', 0);
5671 print $langs->trans(
'Done');
5674 $hmac_secret_key =
dolDecrypt($hmac_encoded_secret_key);
5676 if (! preg_match(
'/^BLOCKEDLOGHMAC/', $hmac_secret_key)) {
5677 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.';
5678 print
'Restore the value of $dolibarr_main_crypt_key that was used for encryption in database and restart the migration.';
5679 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.';
5686 print $langs->trans(
"NothingToDo").
"\n";
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)
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, $remise_percent_global, $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.
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_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.