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").';
70require_once $dolibarr_main_document_root.
'/compta/facture/class/facture.class.php';
71require_once $dolibarr_main_document_root.
'/comm/propal/class/propal.class.php';
72require_once $dolibarr_main_document_root.
'/contrat/class/contrat.class.php';
73require_once $dolibarr_main_document_root.
'/commande/class/commande.class.php';
74require_once $dolibarr_main_document_root.
'/fourn/class/fournisseur.commande.class.php';
75require_once $dolibarr_main_document_root.
'/core/lib/price.lib.php';
76require_once $dolibarr_main_document_root.
'/core/class/menubase.class.php';
77require_once $dolibarr_main_document_root.
'/core/lib/admin.lib.php';
78require_once $dolibarr_main_document_root.
'/core/lib/files.lib.php';
79require_once $dolibarr_main_document_root.
'/user/class/user.class.php';
88$err = error_reporting();
97$setuplang =
GETPOST(
"selectlang",
'aZ09', 3) ?
GETPOST(
"selectlang",
'aZ09', 3) :
'auto';
98$langs->setDefaultLang($setuplang);
99$versionfrom =
GETPOST(
"versionfrom",
'alpha', 3) ?
GETPOST(
"versionfrom",
'alpha', 3) : (empty($argv[1]) ?
'' : $argv[1]);
100$versionto =
GETPOST(
"versionto",
'alpha', 3) ?
GETPOST(
"versionto",
'alpha', 3) : (empty($argv[2]) ?
'' : $argv[2]);
101$enablemodules =
GETPOST(
"enablemodules",
'alpha', 3) ?
GETPOST(
"enablemodules",
'alpha', 3) : (empty($argv[3]) ?
'' : $argv[3]);
103$langs->loadLangs(array(
"admin",
"install",
"bills",
"suppliers"));
105if ($dolibarr_main_db_type ==
'mysqli') {
108if ($dolibarr_main_db_type ==
'pgsql') {
111if ($dolibarr_main_db_type ==
'mssql') {
116dolibarr_install_syslog(
"--- upgrade2: entering upgrade2.php page ".$versionfrom.
" ".$versionto.
" ".$enablemodules);
117if (!is_object($conf)) {
127if ((!$versionfrom || preg_match(
'/version/', $versionfrom)) && (!$versionto || preg_match(
'/version/', $versionto))) {
128 print
'Error: Parameter versionfrom or versionto missing or having a bad format.'.
"\n";
129 print
'Upgrade must be ran from command line with parameters or called from page install/index.php (like a first install)'.
"\n";
131 $sapi_type = php_sapi_name();
132 $script_file = basename(__FILE__);
133 if (substr($sapi_type, 0, 3) ==
'cli') {
134 print
'Syntax from command line: '.$script_file.
" x.y.z a.b.c [MAIN_MODULE_NAME1_TO_ENABLE,MAIN_MODULE_NAME2_TO_ENABLE...]\n";
135 print
'Example, upgrade from 19 to 20: '.$script_file.
" 19.0.0 20.0.0\n";
136 print
'Example, enable a module only: '.$script_file.
" 0.0.0 0.0.0 MAIN_MODULE_Adherent\n";
142pHeader(
'',
'step5',
GETPOST(
'action',
'aZ09') ?
GETPOST(
'action',
'aZ09') :
'upgrade',
'versionfrom='.$versionfrom.
'&versionto='.$versionto,
'',
'main-inside main-inside-borderbottom');
145if (!
GETPOST(
'action',
'aZ09') || preg_match(
'/upgrade/i',
GETPOST(
'action',
'aZ09'))) {
146 print
'<h3><img class="valignmiddle inline-block paddingright" src="../public/theme/common/database.svg" width="20" alt="Database"> ';
147 print
'<span class="inline-block valignmiddle">'.$langs->trans(
'DataMigration').
'</span></h3>';
149 print
'<table class="centpercent">';
152 if ((!empty($dolibarr_main_db_pass) && preg_match(
'/(crypted|dolcrypt):/i', (
string) $dolibarr_main_db_pass)) || !empty($dolibarr_main_db_encrypted_pass)) {
153 require_once $dolibarr_main_document_root.
'/core/lib/security.lib.php';
154 if (!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) {
155 $dolibarr_main_db_pass = preg_replace(
'/crypted:/i',
'', (
string) $dolibarr_main_db_pass);
156 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
157 $dolibarr_main_db_pass =
dol_decode((
string) $dolibarr_main_db_pass);
158 } elseif (preg_match(
'/dolcrypt:/i', (
string) $dolibarr_main_db_pass)) {
159 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
160 $dolibarr_main_db_pass =
dolDecrypt((
string) $dolibarr_main_db_pass);
162 $dolibarr_main_db_pass =
dol_decode((
string) $dolibarr_main_db_encrypted_pass);
167 $conf->db->type = $dolibarr_main_db_type;
168 $conf->db->host = $dolibarr_main_db_host;
169 $conf->db->port = $dolibarr_main_db_port;
170 $conf->db->name = $dolibarr_main_db_name;
171 $conf->db->user = $dolibarr_main_db_user;
172 $conf->db->pass = $dolibarr_main_db_pass;
174 $db =
getDoliDBInstance($conf->db->type, $conf->db->host, $conf->db->user, $conf->db->pass, $conf->db->name, (
int) $conf->db->port);
176 if (!$db->connected) {
177 print
'<tr><td colspan="4">'.$langs->trans(
"ErrorFailedToConnectToDatabase", $conf->db->name).
'</td><td class="right">'.$langs->trans(
'Error').
'</td></tr>';
178 dolibarr_install_syslog(
'upgrade2: failed to connect to database :'.$conf->db->name.
' on '.$conf->db->host.
' for user '.$conf->db->user, LOG_ERR);
183 if ($db->database_selected) {
190 if (empty($dolibarr_main_db_encryption)) {
191 $dolibarr_main_db_encryption = 0;
193 $conf->db->dolibarr_main_db_encryption = $dolibarr_main_db_encryption;
194 if (empty($dolibarr_main_db_cryptkey)) {
195 $dolibarr_main_db_cryptkey =
'';
197 $conf->db->dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey;
200 $conf->setValues($db);
204 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
205 $conf->modules[
'syslog'] =
'syslog';
206 $conf->global->SYSLOG_LEVEL = constant(
'LOG_DEBUG');
207 if (!defined(
'SYSLOG_HANDLERS')) {
208 define(
'SYSLOG_HANDLERS',
'["mod_syslog_file"]');
210 if (!defined(
'SYSLOG_FILE')) {
211 if (@is_writable(
'/tmp')) {
212 define(
'SYSLOG_FILE',
'/tmp/dolibarr_install.log');
213 } elseif (!empty($_ENV[
"TMP"]) && @is_writable($_ENV[
"TMP"])) {
214 define(
'SYSLOG_FILE', $_ENV[
"TMP"].
'/dolibarr_install.log');
215 } elseif (!empty($_ENV[
"TEMP"]) && @is_writable($_ENV[
"TEMP"])) {
216 define(
'SYSLOG_FILE', $_ENV[
"TEMP"].
'/dolibarr_install.log');
217 } elseif (@is_writable(
'../../../../') && @file_exists(
'../../../../startdoliwamp.bat')) {
218 define(
'SYSLOG_FILE',
'../../../../dolibarr_install.log');
219 } elseif (@is_writable(
'../../')) {
220 define(
'SYSLOG_FILE',
'../../dolibarr_install.log');
224 if (defined(
'SYSLOG_FILE')) {
225 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
227 if (!defined(
'SYSLOG_FILE_NO_ERROR')) {
228 define(
'SYSLOG_FILE_NO_ERROR', 1);
231 $handlers = array(
'mod_syslog_file');
232 foreach ($handlers as $handler) {
233 $file = DOL_DOCUMENT_ROOT.
'/core/modules/syslog/'.$handler.
'.php';
234 if (!file_exists($file)) {
235 throw new Exception(
'Missing log handler file '.$handler.
'.php');
239 $loghandlerinstance =
new $handler();
240 if (!$loghandlerinstance instanceof
LogHandler) {
241 throw new Exception(
'Log handler does not extend LogHandler');
244 if (empty($conf->loghandlers[$handler])) {
245 $conf->loghandlers[$handler] = $loghandlerinstance;
250 $listofentities = array(1);
253 include_once DOL_DOCUMENT_ROOT.
'/core/class/hookmanager.class.php';
255 $hookmanager->initHooks(array(
'upgrade2'));
257 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto);
260 $reshook = $hookmanager->executeHooks(
'doUpgradeBefore', $parameters,
$object, $action);
261 if ($reshook >= 0 && is_array($hookmanager->resArray)) {
263 $listofentities = array_unique(array_merge($listofentities, $hookmanager->resArray));
273 dol_syslog(
"Process upgrade2 (step common to all entities)");
276 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN birth date';
278 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemployment date';
280 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemploymentend date';
282 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_range integer';
284 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_c_exp_tax_cat integer';
286 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN langs varchar(24)';
288 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fieldcomputed text';
290 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fielddefault varchar(255)';
292 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
"extrafields ADD COLUMN enabled varchar(255) DEFAULT '1'";
294 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN help text';
296 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user_rights ADD COLUMN entity integer DEFAULT 1 NOT NULL';
302 foreach ($listofentities as $entity) {
303 dol_syslog(
"Process upgrade2 (step a) for entity ".$entity);
306 $conf->setEntityValues($db, $entity);
309 if (defined(
'SYSLOG_FILE')) {
310 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
313 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
315 $versiontoarray = array();
316 $versionranarray = array();
318 dol_syslog(
"Process upgrade2 (step b) for entity ".$entity);
321 if (count($listofentities) > 1) {
322 print
'<tr><td colspan="4">*** '.$langs->trans(
"Entity").
' '.$entity.
'</td></tr>'.
"\n";
333 $versiontoarray = explode(
'.', $versionto);
334 $versionranarray = explode(
'.', DOL_VERSION);
336 $afterversionarray = explode(
'.',
'2.0.0');
337 $beforeversionarray = explode(
'.',
'2.7.9');
339 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
400 $afterversionarray = explode(
'.',
'2.7.9');
401 $beforeversionarray = explode(
'.',
'2.8.9');
404 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
428 $afterversionarray = explode(
'.',
'2.8.9');
429 $beforeversionarray = explode(
'.',
'2.9.9');
431 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
443 $afterversionarray = explode(
'.',
'2.9.9');
444 $beforeversionarray = explode(
'.',
'3.0.9');
450 $afterversionarray = explode(
'.',
'3.0.9');
451 $beforeversionarray = explode(
'.',
'3.1.9');
453 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
461 $afterversionarray = explode(
'.',
'3.1.9');
462 $beforeversionarray = explode(
'.',
'3.2.9');
464 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
474 $afterversionarray = explode(
'.',
'3.2.9');
475 $beforeversionarray = explode(
'.',
'3.3.9');
477 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
486 $afterversionarray = explode(
'.',
'3.6.9');
487 $beforeversionarray = explode(
'.',
'3.7.9');
489 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
495 $afterversionarray = explode(
'.',
'3.7.9');
496 $beforeversionarray = explode(
'.',
'3.8.9');
502 $afterversionarray = explode(
'.',
'3.9.9');
503 $beforeversionarray = explode(
'.',
'4.0.9');
505 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
511 $afterversionarray = explode(
'.',
'4.0.9');
512 $beforeversionarray = explode(
'.',
'5.0.9');
514 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
524 $afterversionarray = explode(
'.',
'5.0.9');
525 $beforeversionarray = explode(
'.',
'6.0.9');
528 global $multicompany_transverse_mode;
531 if (empty($multicompany_transverse_mode)) {
532 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
544 $afterversionarray = explode(
'.',
'6.0.9');
545 $beforeversionarray = explode(
'.',
'7.0.9');
547 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
556 $afterversionarray = explode(
'.',
'7.0.9');
557 $beforeversionarray = explode(
'.',
'8.0.9');
559 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
565 $afterversionarray = explode(
'.',
'8.0.9');
566 $beforeversionarray = explode(
'.',
'9.0.9');
572 $afterversionarray = explode(
'.',
'10.0.9');
573 $beforeversionarray = explode(
'.',
'11.0.9');
575 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
584 $afterversionarray = explode(
'.',
'13.0.9');
585 $beforeversionarray = explode(
'.',
'14.0.9');
587 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
594 $afterversionarray = explode(
'.',
'15.0.9');
595 $beforeversionarray = explode(
'.',
'16.0.9');
597 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
604 $afterversionarray = explode(
'.',
'16.0.9');
605 $beforeversionarray = explode(
'.',
'17.0.9');
607 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
613 $afterversionarray = explode(
'.',
'17.0.9');
614 $beforeversionarray = explode(
'.',
'18.0.9');
616 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
630 $afterversionarray = explode(
'.',
'19.0.9');
631 $beforeversionarray = explode(
'.',
'20.0.9');
633 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
639 $afterversionarray = explode(
'.',
'20.0.9');
640 $beforeversionarray = explode(
'.',
'21.0.9');
644 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
650 $afterversionarray = explode(
'.',
'21.0.9');
651 $beforeversionarray = explode(
'.',
'22.0.9');
653 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
659 $afterversionarray = explode(
'.',
'22.0.9');
660 $beforeversionarray = explode(
'.',
'23.0.9');
662 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
674 dol_syslog(
"Run migrate_... if migration is LAST ONE");
677 $listofmodule = array(
678 'MAIN_MODULE_ACCOUNTING' =>
'newboxdefonly',
679 'MAIN_MODULE_AGENDA' =>
'newboxdefonly',
680 'MAIN_MODULE_BOM' =>
'menuonly',
681 'MAIN_MODULE_BANQUE' =>
'menuonly',
682 'MAIN_MODULE_BARCODE' =>
'newboxdefonly',
683 'MAIN_MODULE_CRON' =>
'newboxdefonly',
684 'MAIN_MODULE_COMMANDE' =>
'newboxdefonly',
685 'MAIN_MODULE_BLOCKEDLOG' =>
'noboxes',
686 'MAIN_MODULE_DON' =>
'newboxdefonly',
687 'MAIN_MODULE_ECM' =>
'newboxdefonly',
688 'MAIN_MODULE_EVENTORGANIZATION' =>
'newboxdefonly',
689 'MAIN_MODULE_EXPENSEREPORT' =>
'newboxdefonly',
690 'MAIN_MODULE_FACTURE' =>
'newboxdefonly',
691 'MAIN_MODULE_FOURNISSEUR' =>
'newboxdefonly',
692 'MAIN_MODULE_FICHEINTER' =>
'newboxdefonly',
693 'MAIN_MODULE_HOLIDAY' =>
'newboxdefonly',
694 'MAIN_MODULE_LOAN' =>
'newboxdefonly',
695 'MAIN_MODULE_MARGIN' =>
'menuonly',
696 'MAIN_MODULE_MRP' =>
'menuonly',
697 'MAIN_MODULE_OPENSURVEY' =>
'newboxdefonly',
698 'MAIN_MODULE_PARTNERSHIP' =>
'newboxdefonly',
699 'MAIN_MODULE_PRINTING' =>
'newboxdefonly',
700 'MAIN_MODULE_PRODUIT' =>
'newboxdefonly',
701 'MAIN_MODULE_RECRUITMENT' =>
'menuonly',
702 'MAIN_MODULE_RESOURCE' =>
'noboxes',
703 'MAIN_MODULE_SALARIES' =>
'newboxdefonly',
704 'MAIN_MODULE_SERVICE' =>
'newboxdefonly',
705 'MAIN_MODULE_SYSLOG' =>
'newboxdefonly',
706 'MAIN_MODULE_SOCIETE' =>
'newboxdefonly',
707 'MAIN_MODULE_STRIPE' =>
'menuonly',
708 'MAIN_MODULE_TICKET' =>
'newboxdefonly',
709 'MAIN_MODULE_TAKEPOS' =>
'newboxdefonly',
710 'MAIN_MODULE_USER' =>
'newboxdefonly',
711 'MAIN_MODULE_VARIANTS' =>
'newboxdefonly',
712 'MAIN_MODULE_WEBSITE' =>
'newboxdefonly',
730 if (!$error && $enablemodules) {
732 $listofmodules = array();
733 $enablemodules = preg_replace(
'/enablemodules=/',
'', $enablemodules);
734 $tmplistofmodules = explode(
',', $enablemodules);
735 foreach ($tmplistofmodules as $value) {
736 $listofmodules[$value] =
'forceactivate';
740 if ($resultreloadmodules < 0) {
748 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' => $conf);
751 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterDB', $parameters,
$object, $action);
752 if ($hookmanager->resNbOfHooks > 0) {
754 print
'<tr><td colspan="4">';
755 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
756 print $hookmanager->error;
757 print
"<!-- (".$reshook.
") -->";
760 print
'<tr class="trforrunsql"><td colspan="4">';
761 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (DB)</b>: <span class="ok">OK</span>';
762 print
"<!-- (".$reshook.
") -->";
767 if (!empty($conf->modules_parts[
'hooks'])) {
768 print
'<tr class="trforrunsql"><td colspan="4">';
769 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterDB");
780 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"const SET VALUE = 'torefresh' WHERE name = 'MAIN_FIRST_PING_OK_ID'";
795 foreach ($listofentities as $entity) {
797 $conf->setEntityValues($db, $entity);
799 if (defined(
'SYSLOG_FILE')) {
800 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
802 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
806 $srcroot = DOL_DOCUMENT_ROOT.
'/install/medias';
807 $destroot = DOL_DATA_ROOT.
'/medias';
820 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' => $conf);
823 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterFiles', $parameters,
$object, $action);
824 if ($hookmanager->resNbOfHooks > 0) {
826 print
'<tr><td colspan="4">';
827 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
828 print $hookmanager->error;
829 print
"<!-- (".$reshook.
") -->";
832 print
'<tr class="trforrunsql"><td colspan="4">';
833 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (Files)</b>: <span class="ok">OK</span>';
834 print
"<!-- (".$reshook.
") -->";
839 if (!empty($conf->modules_parts[
'hooks'])) {
840 print
'<tr class="trforrunsql"><td colspan="4">';
841 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterFiles");
851 print
'<table width="100%">';
852 print
'<tr><td style="width: 30%">'.$langs->trans(
"MigrationFinished").
'</td>';
853 print
'<td class="right">';
857 print
'<span class="error">'.$langs->trans(
"Error").
'</span> - ';
861 print
'<script type="text/javascript">
862 jQuery(document).ready(function() {
863 function init_trrunsql()
865 console.log("toggle .trforrunsql");
866 jQuery(".trforrunsql").toggle();
869 jQuery(".trforrunsqlshowhide").click(function() {
874 print
'<a class="trforrunsqlshowhide" href="#">'.$langs->trans(
"ShowHideDetails").
'</a>';
877 print
'</td></tr>'.
"\n";
883 print
'<div class="error">'.$langs->trans(
'ErrorWrongParameters').
'</div>';
888if ($error && isset($argv[1])) {
894pFooter($error ? 2 : 0, $setuplang);
917 print
'<tr><td colspan="4">';
920 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
922 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
923 $obj = $db->fetch_object($result);
925 $sql =
"SELECT p.rowid, p.fk_facture, p.amount";
926 $sql .=
" FROM ".MAIN_DB_PREFIX.
"paiement as p";
927 $sql .=
" WHERE p.fk_facture > 0";
929 $resql = $db->query($sql);
936 $num = $db->num_rows($resql);
939 $obj = $db->fetch_object($resql);
940 $row[$i][0] = $obj->rowid;
941 $row[$i][1] = $obj->fk_facture;
942 $row[$i][2] = $obj->amount;
950 print $langs->trans(
'MigrationPaymentsNumberToUpdate', $num).
"<br>\n";
954 for ($i = 0; $i < $num; $i++) {
955 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
956 $sql .=
" VALUES (".((int) $row[$i][1]).
",".((int) $row[$i][0]).
",".((float) $row[$i][2]).
")";
958 $res += $db->query($sql);
960 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET fk_facture = 0 WHERE rowid = ".((int) $row[$i][0]);
962 $res += $db->query($sql);
964 print $langs->trans(
'MigrationProcessPaymentUpdate', $row[$i][0]).
"<br>\n";
968 if (is_array($row) && $res == (2 * count($row))) {
970 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
973 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
976 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
979 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
997 print
'<tr><td colspan="4">';
1000 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
1002 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
1003 $obj = $db->fetch_object($result);
1006 $sql =
"SELECT DISTINCT p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1007 $sql .=
" bu2.url_id as socid";
1008 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1009 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1010 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')";
1011 $sql .=
" WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid";
1012 $sql .=
" AND b.rappro = 1";
1013 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1015 $resql = $db->query($sql);
1021 $num = $db->num_rows($resql);
1024 $obj = $db->fetch_object($resql);
1025 if ($obj->pamount == $obj->bamount && $obj->socid) {
1026 $row[$j][
'paymentid'] = $obj->rowid;
1027 $row[$j][
'pamount'] = $obj->pamount;
1028 $row[$j][
'fk_bank'] = $obj->fk_bank;
1029 $row[$j][
'bamount'] = $obj->bamount;
1030 $row[$j][
'socid'] = $obj->socid;
1031 $row[$j][
'datec'] = $obj->datec;
1041 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 1).
': '.count($row).
"<br>\n";
1046 for ($i = 0; $i < $num; $i++) {
1048 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>';
1052 $sql =
" SELECT DISTINCT f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1053 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1054 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1055 $sql .=
" AND pf.fk_facture IS NULL";
1056 $sql .=
" ORDER BY f.fk_statut";
1058 $resql = $db->query($sql);
1060 $num = $db->num_rows($resql);
1063 $obj = $db->fetch_object($resql);
1064 $facid = $obj->rowid;
1066 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1067 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1069 $res += $db->query($sql);
1071 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1079 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1081 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1086 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1089 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1107 print
'<tr><td colspan="4">';
1110 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
1112 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
1113 $obj = $db->fetch_object($result);
1116 $sql =
"SELECT DISTINCT p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1117 $sql .=
" bu2.url_id as socid";
1118 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1119 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1120 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')";
1121 $sql .=
" WHERE pf.rowid IS NULL AND (p.fk_bank = bu.fk_bank AND bu.type = 'payment') AND bu.fk_bank = b.rowid";
1122 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1124 $resql = $db->query($sql);
1130 $num = $db->num_rows($resql);
1133 $obj = $db->fetch_object($resql);
1134 if ($obj->pamount == $obj->bamount && $obj->socid) {
1135 $row[$j][
'paymentid'] = $obj->rowid;
1136 $row[$j][
'pamount'] = $obj->pamount;
1137 $row[$j][
'fk_bank'] = $obj->fk_bank;
1138 $row[$j][
'bamount'] = $obj->bamount;
1139 $row[$j][
'socid'] = $obj->socid;
1140 $row[$j][
'datec'] = $obj->datec;
1153 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 2).
': '.count($row).
"<br>\n";
1157 for ($i = 0; $i < $num; $i++) {
1159 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>';
1163 $sql =
" SELECT DISTINCT f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1164 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1165 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1166 $sql .=
" AND pf.fk_facture IS NULL";
1167 $sql .=
" ORDER BY f.fk_statut";
1169 $resql = $db->query($sql);
1171 $num = $db->num_rows($resql);
1174 $obj = $db->fetch_object($resql);
1175 $facid = $obj->rowid;
1177 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1178 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1180 $res += $db->query($sql);
1182 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1191 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1193 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1198 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1204 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiement DROP COLUMN fk_facture";
1214 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1231 print
'<tr><td colspan="4">';
1236 print
'<b>'.$langs->trans(
'MigrationContractsUpdate').
"</b><br>\n";
1238 $sql =
"SELECT c.rowid as cref, c.date_contrat, c.statut, c.fk_product, c.fk_facture, c.fk_user_author,";
1239 $sql .=
" p.ref, p.label, p.description, p.price, p.tva_tx, p.duration, cd.rowid";
1240 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c";
1241 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p";
1242 $sql .=
" ON c.fk_product = p.rowid";
1243 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"contratdet as cd";
1244 $sql .=
" ON c.rowid=cd.fk_contrat";
1245 $sql .=
" WHERE cd.rowid IS NULL AND p.rowid IS NOT NULL";
1246 $resql = $db->query($sql);
1252 $num = $db->num_rows($resql);
1255 print $langs->trans(
'MigrationContractsNumberToUpdate', $num).
"<br>\n";
1259 $obj = $db->fetch_object($resql);
1261 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"contratdet (";
1262 $sql .=
"fk_contrat, fk_product, statut, label, description,";
1263 $sql .=
"date_ouverture_prevue, date_ouverture, date_fin_validite, tva_tx, qty,";
1264 $sql .=
"subprice, price_ht, fk_user_author, fk_user_ouverture)";
1265 $sql .=
" VALUES (";
1266 $sql .= ((int) $obj->cref).
", ".($obj->fk_product ? ((int) $obj->fk_product) : 0).
", ";
1268 $sql .=
"'".$db->escape($obj->label).
"', null, ";
1269 $sql .= ($obj->date_contrat ?
"'".$db->idate($db->jdate($obj->date_contrat)).
"'" :
"null").
", ";
1272 $sql .= ((float) $obj->tva_tx).
", 1, ";
1273 $sql .= ((float) $obj->price).
", ".((float) $obj->price).
", ".((int) $obj->fk_user_author).
",";
1277 if ($db->query($sql)) {
1278 print $langs->trans(
'MigrationContractsLineCreation', $obj->cref).
"<br>\n";
1290 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1293 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1296 print $langs->trans(
'MigrationContractsNothingToUpdate').
"<br>\n";
1299 print $langs->trans(
'MigrationContractsFieldDontExist').
"<br>\n";
1316 print
'<tr><td colspan="4">';
1321 print
'<b>'.$langs->trans(
'MigrationBankTransfertsUpdate').
"</b><br>\n";
1323 $sql =
"SELECT ba.rowid as barowid, bb.rowid as bbrowid";
1324 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as bb, ".MAIN_DB_PREFIX.
"bank as ba";
1325 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu ON bu.fk_bank = ba.rowid";
1326 $sql .=
" WHERE ba.amount = -bb.amount AND ba.fk_account <> bb.fk_account";
1327 $sql .=
" AND ba.datev = bb.datev AND ba.datec = bb.datec";
1328 $sql .=
" AND bu.fk_bank IS NULL";
1329 $resql = $db->query($sql);
1335 $num = $db->num_rows($resql);
1338 print $langs->trans(
'MigrationBankTransfertsToUpdate', $num).
"<br>\n";
1342 $obj = $db->fetch_object($resql);
1344 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"bank_url (";
1345 $sql .=
"fk_bank, url_id, url, label, type";
1347 $sql .=
" VALUES (";
1348 $sql .= $obj->barowid.
",".$obj->bbrowid.
", '/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'";
1354 if (!$db->query($sql)) {
1365 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1368 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1371 print $langs->trans(
'MigrationBankTransfertsNothingToUpdate').
"<br>\n";
1390 print
'<tr><td colspan="4">';
1393 print
'<b>'.$langs->trans(
'MigrationContractsEmptyDatesUpdate').
"</b><br>\n";
1395 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set date_contrat=tms where date_contrat is null";
1397 $resql = $db->query($sql);
1401 if ($db->affected_rows($resql) > 0) {
1402 print $langs->trans(
'MigrationContractsEmptyDatesUpdateSuccess').
"<br>\n";
1404 print $langs->trans(
'MigrationContractsEmptyDatesNothingToUpdate').
"<br>\n";
1407 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=tms where datec is null";
1409 $resql = $db->query($sql);
1413 if ($db->affected_rows($resql) > 0) {
1414 print $langs->trans(
'MigrationContractsEmptyCreationDatesUpdateSuccess').
"<br>\n";
1416 print $langs->trans(
'MigrationContractsEmptyCreationDatesNothingToUpdate').
"<br>\n";
1432 print
'<tr><td colspan="4">';
1437 print
'<b>'.$langs->trans(
'MigrationContractsInvalidDatesUpdate').
"</b><br>\n";
1439 $sql =
"SELECT c.rowid as cref, c.datec, c.date_contrat, MIN(cd.date_ouverture) as datemin";
1440 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c,";
1441 $sql .=
" ".MAIN_DB_PREFIX.
"contratdet as cd";
1442 $sql .=
" WHERE c.rowid=cd.fk_contrat AND cd.date_ouverture IS NOT NULL";
1443 $sql .=
" GROUP BY c.rowid, c.date_contrat";
1444 $resql = $db->query($sql);
1450 $num = $db->num_rows($resql);
1453 $nbcontratsmodifie = 0;
1457 $obj = $db->fetch_object($resql);
1458 if ($obj->date_contrat > $obj->datemin) {
1459 $datemin = $db->jdate($obj->datemin);
1461 print $langs->trans(
'MigrationContractsInvalidDateFix', $obj->cref, $obj->date_contrat, $obj->datemin).
"<br>\n";
1462 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1463 $sql .=
" SET date_contrat='".$db->idate($datemin).
"'";
1464 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1465 $resql2 = $db->query($sql);
1470 $nbcontratsmodifie++;
1477 if ($nbcontratsmodifie) {
1478 print $langs->trans(
'MigrationContractsInvalidDatesNumber', $nbcontratsmodifie).
"<br>\n";
1480 print $langs->trans(
'MigrationContractsInvalidDatesNothingToUpdate').
"<br>\n";
1500 print
'<tr><td colspan="4">';
1503 print
'<b>'.$langs->trans(
'MigrationContractsIncoherentCreationDateUpdate').
"</b><br>\n";
1505 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=date_contrat where datec is null or datec > date_contrat";
1507 $resql = $db->query($sql);
1511 if ($db->affected_rows($resql) > 0) {
1512 print $langs->trans(
'MigrationContractsIncoherentCreationDateUpdateSuccess').
"<br>\n";
1514 print $langs->trans(
'MigrationContractsIncoherentCreationDateNothingToUpdate').
"<br>\n";
1530 print
'<tr><td colspan="4">';
1533 print
'<b>'.$langs->trans(
'MigrationReopeningContracts').
"</b><br>\n";
1535 $sql =
"SELECT c.rowid as cref FROM ".MAIN_DB_PREFIX.
"contrat as c, ".MAIN_DB_PREFIX.
"contratdet as cd";
1536 $sql .=
" WHERE cd.statut = 4 AND c.statut=2 AND c.rowid=cd.fk_contrat";
1538 $resql = $db->query($sql);
1542 if ($db->affected_rows($resql) > 0) {
1545 $num = $db->num_rows($resql);
1548 $nbcontratsmodifie = 0;
1552 $obj = $db->fetch_object($resql);
1554 print $langs->trans(
'MigrationReopenThisContract', $obj->cref).
"<br>\n";
1555 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1556 $sql .=
" SET statut = 1";
1557 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1558 $resql2 = $db->query($sql);
1563 $nbcontratsmodifie++;
1570 if ($nbcontratsmodifie) {
1571 print $langs->trans(
'MigrationReopenedContractsNumber', $nbcontratsmodifie).
"<br>\n";
1573 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1577 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1595 print
'<tr><td colspan="4">';
1597 print
'<b>'.$langs->trans(
'SuppliersInvoices').
"</b><br>\n";
1600 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiementfourn",
"fk_facture_fourn");
1601 $obj = $db->fetch_object($result);
1606 $select_sql =
'SELECT rowid, fk_facture_fourn, amount';
1607 $select_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn';
1608 $select_sql .=
' WHERE fk_facture_fourn IS NOT NULL';
1611 $select_resql = $db->query($select_sql);
1612 if ($select_resql) {
1613 $select_num = $db->num_rows($select_resql);
1617 while (($i < $select_num) && (!$error)) {
1618 $select_obj = $db->fetch_object($select_resql);
1621 $check_sql =
'SELECT fk_paiementfourn, fk_facturefourn';
1622 $check_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn';
1623 $check_sql .=
' WHERE fk_paiementfourn = '.((int) $select_obj->rowid).
' AND fk_facturefourn = '.((int) $select_obj->fk_facture_fourn);
1624 $check_resql = $db->query($check_sql);
1626 $check_num = $db->num_rows($check_resql);
1627 if ($check_num == 0) {
1631 print
'<tr><td colspan="4" class="nowrap"><b>'.$langs->trans(
'SuppliersInvoices').
'</b></td></tr>';
1632 print
'<tr><td>fk_paiementfourn</td><td>fk_facturefourn</td><td>'.$langs->trans(
'Amount').
'</td><td> </td></tr>';
1635 print
'<tr class="oddeven">';
1636 print
'<td>'.$select_obj->rowid.
'</td><td>'.$select_obj->fk_facture_fourn.
'</td><td>'.$select_obj->amount.
'</td>';
1638 $insert_sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn SET ';
1639 $insert_sql .=
' fk_paiementfourn = \''.$select_obj->rowid.
'\',
';
1640 $insert_sql .= ' fk_facturefourn = \
''.$select_obj->fk_facture_fourn.
'\',
';
1641 $insert_sql .= ' amount = \
''.$select_obj->amount.
'\'';
1642 $insert_resql = $db->query($insert_sql);
1644 if ($insert_resql) {
1646 print
'<td><span class="ok">'.$langs->trans(
"OK").
'</span></td>';
1648 print
'<td><span class="error">Error on insert</span></td>';
1664 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1668 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiementfourn DROP COLUMN fk_facture_fourn";
1671 print
'<tr><td>'.$langs->trans(
"Error").
'</td></tr>';
1675 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1692 $tmpmysoc->setMysoc($conf);
1696 print
'<tr><td colspan="4">';
1699 print
'<b>'.$langs->trans(
'MigrationInvoice').
"</b><br>\n";
1702 $sql =
"SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as vatrate, fd.total_ttc, fd.info_bits,";
1703 $sql .=
" f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f";
1704 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facturedet as fd, ".MAIN_DB_PREFIX.
"facture as f";
1705 $sql .=
" WHERE fd.fk_facture = f.rowid";
1706 $sql .=
" AND (((fd.total_ttc = 0 AND fd.remise_percent != 100) or fd.total_ttc IS NULL) or f.total_ttc IS NULL)";
1710 $resql = $db->query($sql);
1712 $num = $db->num_rows($resql);
1716 $obj = $db->fetch_object($resql);
1718 $rowid = $obj->rowid;
1720 $pu = $obj->subprice;
1721 $vatrate = $obj->vatrate;
1722 $remise_percent = $obj->remise_percent;
1723 $remise_percent_global = $obj->remise_percent_global;
1724 $total_ttc_f = $obj->total_ttc_f;
1725 $info_bits = $obj->info_bits;
1729 $facligne->fetch($rowid);
1731 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $facligne->product_type, $tmpmysoc);
1732 $total_ht = $result[0];
1733 $total_tva = $result[1];
1734 $total_ttc = $result[2];
1736 $facligne->total_ht = (float) $total_ht;
1737 $facligne->total_tva = (float) $total_tva;
1738 $facligne->total_ttc = (float) $total_ttc;
1740 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);
1742 $facligne->update_total();
1746 if (!$total_ttc_f) {
1748 $facture->id = $obj->facid;
1750 if ($facture->fetch($facture->id) >= 0) {
1751 if ($facture->update_price() > 0) {
1754 print
"Error id=".$facture->id;
1767 print $langs->trans(
"AlreadyDone");
1773 print
"Error #1 ".$db->error();
1795 $tmpmysoc->setMysoc($conf);
1799 print
'<tr><td colspan="4">';
1802 print
'<b>'.$langs->trans(
'MigrationProposal').
"</b><br>\n";
1805 $sql =
"SELECT pd.rowid, pd.qty, pd.subprice, pd.remise_percent, pd.tva_tx as vatrate, pd.info_bits,";
1806 $sql .=
" p.rowid as propalid, p.remise_percent as remise_percent_global";
1807 $sql .=
" FROM ".MAIN_DB_PREFIX.
"propaldet as pd, ".MAIN_DB_PREFIX.
"propal as p";
1808 $sql .=
" WHERE pd.fk_propal = p.rowid";
1809 $sql .=
" AND ((pd.total_ttc = 0 AND pd.remise_percent != 100) or pd.total_ttc IS NULL)";
1812 $resql = $db->query($sql);
1814 $num = $db->num_rows($resql);
1818 $obj = $db->fetch_object($resql);
1820 $rowid = $obj->rowid;
1822 $pu = $obj->subprice;
1823 $vatrate = $obj->vatrate;
1824 $remise_percent = $obj->remise_percent;
1825 $remise_percent_global = $obj->remise_percent_global;
1826 $info_bits = $obj->info_bits;
1830 $propalligne->fetch($rowid);
1832 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $propalligne->product_type, $tmpmysoc);
1833 $total_ht = $result[0];
1834 $total_tva = $result[1];
1835 $total_ttc = $result[2];
1837 $propalligne->total_ht = (float) $total_ht;
1838 $propalligne->total_tva = (float) $total_tva;
1839 $propalligne->total_ttc = (float) $total_ttc;
1841 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);
1843 $propalligne->update_total();
1848 print $langs->trans(
"AlreadyDone");
1855 print
"Error #1 ".$db->error();
1878 $tmpmysoc->setMysoc($conf);
1879 if (empty($tmpmysoc->country_id)) {
1880 $tmpmysoc->country_id = 0;
1883 print
'<tr><td colspan="4">';
1886 print
'<b>'.$langs->trans(
'MigrationContract').
"</b><br>\n";
1889 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1890 $sql .=
" c.rowid as contratid";
1891 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd, ".MAIN_DB_PREFIX.
"contrat as c";
1892 $sql .=
" WHERE cd.fk_contrat = c.rowid";
1893 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100 AND cd.subprice > 0) or cd.total_ttc IS NULL)";
1896 $resql = $db->query($sql);
1898 $num = $db->num_rows($resql);
1902 $obj = $db->fetch_object($resql);
1904 $rowid = $obj->rowid;
1906 $pu = $obj->subprice;
1907 $vatrate = $obj->vatrate;
1908 $remise_percent = $obj->remise_percent;
1909 $info_bits = $obj->info_bits;
1914 $contratligne->fetch($rowid);
1916 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, 0,
'HT', $info_bits, $contratligne->product_type, $tmpmysoc);
1917 $total_ht = $result[0];
1918 $total_tva = $result[1];
1919 $total_ttc = $result[2];
1921 $contratligne->total_ht = (float) $total_ht;
1922 $contratligne->total_tva = (float) $total_tva;
1923 $contratligne->total_ttc = (float) $total_ttc;
1925 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);
1927 $contratligne->update_total();
1932 print $langs->trans(
"AlreadyDone");
1939 print
"Error #1 ".$db->error();
1962 $tmpmysoc->setMysoc($conf);
1964 print
'<tr><td colspan="4">';
1967 print
'<b>'.$langs->trans(
'MigrationOrder').
"</b><br>\n";
1970 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1971 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1972 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"commande as c";
1973 $sql .=
" WHERE cd.fk_commande = c.rowid";
1974 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1977 $resql = $db->query($sql);
1979 $num = $db->num_rows($resql);
1983 $obj = $db->fetch_object($resql);
1985 $rowid = $obj->rowid;
1987 $pu = $obj->subprice;
1988 $vatrate = $obj->vatrate;
1989 $remise_percent = $obj->remise_percent;
1990 $remise_percent_global = $obj->remise_percent_global;
1991 $info_bits = $obj->info_bits;
1995 $commandeligne->fetch($rowid);
1997 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $tmpmysoc);
1998 $total_ht = $result[0];
1999 $total_tva = $result[1];
2000 $total_ttc = $result[2];
2002 $commandeligne->total_ht = (float) $total_ht;
2003 $commandeligne->total_tva = (float) $total_tva;
2004 $commandeligne->total_ttc = (float) $total_ttc;
2006 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);
2008 $commandeligne->update_total();
2013 print $langs->trans(
"AlreadyDone");
2030 print
"Error #1 ".$db->error();
2055 $tmpmysoc->setMysoc($conf);
2057 print
'<tr><td colspan="4">';
2060 print
'<b>'.$langs->trans(
'MigrationSupplierOrder').
"</b><br>\n";
2063 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
2064 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
2065 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cd, ".MAIN_DB_PREFIX.
"commande_fournisseur as c";
2066 $sql .=
" WHERE cd.fk_commande = c.rowid";
2067 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
2070 $resql = $db->query($sql);
2072 $num = $db->num_rows($resql);
2076 $obj = $db->fetch_object($resql);
2078 $rowid = $obj->rowid;
2080 $pu = $obj->subprice;
2081 $vatrate = $obj->vatrate;
2082 $remise_percent = $obj->remise_percent;
2083 $remise_percent_global = $obj->remise_percent_global;
2084 $info_bits = $obj->info_bits;
2088 $commandeligne->fetch($rowid);
2090 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type,
$mysoc);
2091 $total_ht = $result[0];
2092 $total_tva = $result[1];
2093 $total_ttc = $result[2];
2095 $commandeligne->total_ht = (float) $total_ht;
2096 $commandeligne->total_tva = (float) $total_tva;
2097 $commandeligne->total_ttc = (float) $total_ttc;
2099 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);
2101 $commandeligne->update_total();
2106 print $langs->trans(
"AlreadyDone");
2123 print
"Error #1 ".$db->error();
2149 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
2151 if (count($modellist) == 0) {
2153 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('crabe','invoice')";
2154 $resql = $db->query($sql);
2162 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
2164 if (count($modellist) == 0) {
2166 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('einstein','order')";
2167 $resql = $db->query($sql);
2175 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
2177 if (count($modellist) == 0) {
2179 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('rouget','shipping')";
2180 $resql = $db->query($sql);
2203 print
'<tr><td colspan="4">';
2206 print
'<b>'.$langs->trans(
'MigrationShipmentOrderMatching').
"</b><br>\n";
2208 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"fk_commande");
2209 $obj = $db->fetch_object($result);
2215 $sql =
"SELECT e.rowid, e.fk_commande FROM ".MAIN_DB_PREFIX.
"expedition as e";
2216 $resql = $db->query($sql);
2219 $num = $db->num_rows($resql);
2223 $obj = $db->fetch_object($resql);
2225 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_exp (fk_expedition,fk_commande)";
2226 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2227 $resql2 = $db->query($sql);
2240 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition DROP COLUMN fk_commande";
2241 print $langs->trans(
'FieldRenamed').
"<br>\n";
2251 print $langs->trans(
'AlreadyDone').
"<br>\n";
2268 print
'<tr><td colspan="4">';
2271 print
'<b>'.$langs->trans(
'MigrationDeliveryOrderMatching').
"</b><br>\n";
2273 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_commande");
2274 $obj = $db->fetch_object($result);
2280 $sql =
"SELECT l.rowid, l.fk_commande,";
2281 $sql .=
" c.ref_client, c.date_livraison as delivery_date";
2282 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l, ".MAIN_DB_PREFIX.
"commande as c";
2283 $sql .=
" WHERE c.rowid = l.fk_commande";
2284 $resql = $db->query($sql);
2287 $num = $db->num_rows($resql);
2291 $obj = $db->fetch_object($resql);
2293 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_liv (fk_livraison,fk_commande)";
2294 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2295 $resql2 = $db->query($sql);
2298 $delivery_date = $db->jdate($obj->delivery_date);
2300 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2301 $sqlu .=
" ref_client = '".$db->escape($obj->ref_client).
"'";
2302 $sqlu .=
", date_livraison = '".$db->idate($delivery_date).
"'";
2303 $sqlu .=
" WHERE rowid = ".((int) $obj->rowid);
2304 $resql3 = $db->query($sqlu);
2320 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_commande";
2321 print $langs->trans(
'FieldRenamed').
"<br>\n";
2331 print $langs->trans(
'AlreadyDone').
"<br>\n";
2348 print
'<tr><td colspan="4">';
2351 print
'<b>'.$langs->trans(
'MigrationDeliveryDetail').
"</b><br>\n";
2355 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_commande_ligne");
2356 $obj = $db->fetch_object($result);
2362 $sql =
"SELECT cd.rowid, cd.fk_product, cd.description, cd.subprice, cd.total_ht";
2363 $sql .=
", ld.fk_livraison";
2364 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"livraisondet as ld";
2365 $sql .=
" WHERE ld.fk_commande_ligne = cd.rowid";
2366 $resql = $db->query($sql);
2369 $num = $db->num_rows($resql);
2373 $obj = $db->fetch_object($resql);
2375 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"livraisondet SET";
2376 $sql .=
" fk_product = ".((int) $obj->fk_product);
2377 $sql .=
",description = '".$db->escape($obj->description).
"'";
2378 $sql .=
",subprice = ".price2num($obj->subprice);
2379 $sql .=
",total_ht = ".price2num($obj->total_ht);
2380 $sql .=
" WHERE fk_commande_ligne = ".((int) $obj->rowid);
2381 $resql2 = $db->query($sql);
2384 $sql =
"SELECT total_ht";
2385 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
2386 $sql .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2387 $resql3 = $db->query($sql);
2390 $obju = $db->fetch_object($resql3);
2391 $total_ht = $obju->total_ht + $obj->total_ht;
2393 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2394 $sqlu .=
" total_ht = ".price2num($total_ht,
'MT');
2395 $sqlu .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2396 $resql4 = $db->query($sqlu);
2416 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet CHANGE fk_commande_ligne fk_origin_line integer";
2417 print $langs->trans(
'FieldRenamed').
"<br>\n";
2427 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_origin_line");
2428 $obj = $db->fetch_object($result);
2430 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet ADD COLUMN fk_origin_line integer after fk_livraison";
2433 print $langs->trans(
'AlreadyDone').
"<br>\n";
2450 print
'<tr><td colspan="4">';
2453 print
'<b>'.$langs->trans(
'MigrationStockDetail').
"</b><br>\n";
2459 $sql =
"SELECT SUM(reel) as total, fk_product";
2460 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_stock as ps";
2461 $sql .=
" GROUP BY fk_product";
2462 $resql = $db->query($sql);
2465 $num = $db->num_rows($resql);
2469 $obj = $db->fetch_object($resql);
2471 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET";
2472 $sql .=
" stock = ".price2num($obj->total,
'MS');
2473 $sql .=
" WHERE rowid = ".((int) $obj->fk_product);
2475 $resql2 = $db->query($sql);
2512 print
'<tr><td colspan="4">';
2515 print
'<b>'.$langs->trans(
'MigrationMenusDetail').
"</b><br>\n";
2519 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"menu_constraint")) {
2522 $sql =
"SELECT m.rowid, mc.action";
2523 $sql .=
" FROM ".MAIN_DB_PREFIX.
"menu_constraint as mc, ".MAIN_DB_PREFIX.
"menu_const as md, ".MAIN_DB_PREFIX.
"menu as m";
2524 $sql .=
" WHERE md.fk_menu = m.rowid AND md.fk_constraint = mc.rowid";
2525 $sql .=
" AND m.enabled = '1'";
2526 $resql = $db->query($sql);
2529 $num = $db->num_rows($resql);
2532 $obj = $db->fetch_object($resql);
2534 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"menu SET";
2535 $sql .=
" enabled = '".$db->escape($obj->action).
"'";
2536 $sql .=
" WHERE rowid = ".((int) $obj->rowid);
2537 $sql .=
" AND enabled = '1'";
2539 $resql2 = $db->query($sql);
2560 print $langs->trans(
'AlreadyDone').
"<br>\n";
2579 print
'<tr><td colspan="4">';
2582 print
'<b>'.$langs->trans(
'MigrationDeliveryAddress').
"</b><br>\n";
2586 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"co_exp")) {
2589 $sql =
"SELECT c.fk_adresse_livraison, ce.fk_expedition";
2590 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande as c";
2591 $sql .=
", ".MAIN_DB_PREFIX.
"co_exp as ce";
2592 $sql .=
" WHERE c.rowid = ce.fk_commande";
2593 $sql .=
" AND c.fk_adresse_livraison IS NOT NULL AND c.fk_adresse_livraison != 0";
2595 $resql = $db->query($sql);
2598 $num = $db->num_rows($resql);
2602 $obj = $db->fetch_object($resql);
2604 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
2605 $sql .=
" fk_adresse_livraison = '".$db->escape($obj->fk_adresse_livraison).
"'";
2606 $sql .=
" WHERE rowid = ".((int) $obj->fk_expedition);
2608 $resql2 = $db->query($sql);
2617 print $langs->trans(
'AlreadyDone').
"<br>\n";
2630 print $langs->trans(
'AlreadyDone').
"<br>\n";
2649 if (($db->type ==
'mysql' || $db->type ==
'mysqli')) {
2651 dolibarr_install_syslog(
"upgrade2::migrate_restore_missing_links Version of database too old to make this migrate action");
2655 print
'<tr><td colspan="4">';
2658 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (1)<br>\n";
2664 $table1 =
'facturedet';
2665 $field1 =
'fk_remise_except';
2666 $table2 =
'societe_remise_except';
2667 $field2 =
'fk_facture_line';
2671 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2672 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2673 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2674 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2675 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2678 $resql = $db->query($sql);
2681 $num = $db->num_rows($resql);
2685 $obj = $db->fetch_object($resql);
2687 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2689 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2690 $sql .=
" ".$db->sanitize($field2).
" = '".$db->escape($obj->rowid).
"'";
2691 $sql .=
" WHERE rowid = ".((int) $obj->field);
2693 $resql2 = $db->query($sql);
2702 print $langs->trans(
'AlreadyDone').
"<br>\n";
2718 print
'<tr><td colspan="4">';
2721 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (2)<br>\n";
2724 $table2 =
'facturedet';
2725 $field2 =
'fk_remise_except';
2726 $table1 =
'societe_remise_except';
2727 $field1 =
'fk_facture_line';
2731 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2732 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2733 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2734 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2735 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2738 $resql = $db->query($sql);
2741 $num = $db->num_rows($resql);
2745 $obj = $db->fetch_object($resql);
2747 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2749 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2750 $sql .=
" ".$db->sanitize($field2).
" = '".$db->escape($obj->rowid).
"'";
2751 $sql .=
" WHERE rowid = ".((int) $obj->field);
2753 $resql2 = $db->query($sql);
2762 print $langs->trans(
'AlreadyDone').
"<br>\n";
2777 return ($error ? -1 : 1);
2792 print
'<tr><td colspan="4">';
2795 print
'<b>'.$langs->trans(
'MigrationProjectUserResp').
"</b><br>\n";
2797 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"projet",
"fk_user_resp");
2798 $obj = $db->fetch_object($result);
2804 $sql =
"SELECT rowid, fk_user_resp FROM ".MAIN_DB_PREFIX.
"projet";
2805 $resql = $db->query($sql);
2808 $num = $db->num_rows($resql);
2812 $obj = $db->fetch_object($resql);
2814 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2815 $sql2 .=
"datecreate";
2816 $sql2 .=
", statut";
2817 $sql2 .=
", element_id";
2818 $sql2 .=
", fk_c_type_contact";
2819 $sql2 .=
", fk_socpeople";
2820 $sql2 .=
") VALUES (";
2821 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2823 $sql2 .=
", ".$obj->rowid;
2825 $sql2 .=
", ".$obj->fk_user_resp;
2828 if ($obj->fk_user_resp > 0) {
2829 $resql2 = $db->query($sql2);
2842 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"projet DROP COLUMN fk_user_resp";
2843 if ($db->query($sqlDrop)) {
2856 print $langs->trans(
'AlreadyDone').
"<br>\n";
2873 print
'<tr><td colspan="4">';
2876 print
'<b>'.$langs->trans(
'MigrationProjectTaskActors').
"</b><br>\n";
2878 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"projet_task_actors")) {
2883 $sql =
"SELECT fk_projet_task as fk_project_task, fk_user FROM ".MAIN_DB_PREFIX.
"projet_task_actors";
2884 $resql = $db->query($sql);
2887 $num = $db->num_rows($resql);
2891 $obj = $db->fetch_object($resql);
2893 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2894 $sql2 .=
"datecreate";
2895 $sql2 .=
", statut";
2896 $sql2 .=
", element_id";
2897 $sql2 .=
", fk_c_type_contact";
2898 $sql2 .=
", fk_socpeople";
2899 $sql2 .=
") VALUES (";
2900 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2902 $sql2 .=
", ".$obj->fk_project_task;
2904 $sql2 .=
", ".$obj->fk_user;
2907 $resql2 = $db->query($sql2);
2919 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.
"projet_task_actors";
2920 if ($db->query($sqlDrop)) {
2933 print $langs->trans(
'AlreadyDone').
"<br>\n";
2953 print
'<tr><td colspan="4">';
2956 print
'<b>'.$langs->trans(
'MigrationRelationshipTables', MAIN_DB_PREFIX.$table).
"</b><br>\n";
2960 if ($db->DDLInfoTable(MAIN_DB_PREFIX.$table)) {
2965 $sqlSelect =
"SELECT ".$fk_source.
", ".$fk_target;
2966 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.$table;
2968 $resql = $db->query($sqlSelect);
2971 $num = $db->num_rows($resql);
2975 $obj = $db->fetch_object($resql);
2977 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
2978 $sqlInsert .=
"fk_source";
2979 $sqlInsert .=
", sourcetype";
2980 $sqlInsert .=
", fk_target";
2981 $sqlInsert .=
", targettype";
2982 $sqlInsert .=
") VALUES (";
2983 $sqlInsert .= $obj->$fk_source;
2984 $sqlInsert .=
", '".$db->escape($sourcetype).
"'";
2985 $sqlInsert .=
", ".$obj->$fk_target;
2986 $sqlInsert .=
", '".$db->escape($targettype).
"'";
2989 $result = $db->query($sqlInsert);
2998 print $langs->trans(
'AlreadyDone').
"<br>\n";
3002 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.$table;
3003 if ($db->query($sqlDrop)) {
3016 print $langs->trans(
'AlreadyDone').
"<br>\n";
3034 print
'<tr><td colspan="4">';
3037 print
'<b>'.$langs->trans(
'MigrationProjectTaskTime').
"</b><br>\n";
3043 $sql =
"SELECT rowid, fk_element, element_duration";
3044 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_time";
3045 $resql = $db->query($sql);
3048 $num = $db->num_rows($resql);
3051 $totaltime = array();
3055 $obj = $db->fetch_object($resql);
3057 if ($obj->element_duration > 0) {
3060 list($hour, $min) = explode(
'.', $obj->element_duration);
3061 $hour = (int) $hour * 60 * 60;
3062 $min = (int) ((
float) (
'.'.$min)) * 3600;
3063 $newtime = $hour + $min;
3065 $sql2 =
"UPDATE ".MAIN_DB_PREFIX.
"element_time SET";
3066 $sql2 .=
" element_duration = ".((int) $newtime);
3067 $sql2 .=
" WHERE rowid = ".((int) $obj->rowid);
3069 $resql2 = $db->query($sql2);
3076 if (!empty($totaltime[$obj->fk_element])) {
3077 $totaltime[$obj->fk_element] += $newtime;
3079 $totaltime[$obj->fk_element] = $newtime;
3082 if (!empty($totaltime[$obj->fk_element])) {
3083 $totaltime[$obj->fk_element] += $obj->element_duration;
3085 $totaltime[$obj->fk_element] = $obj->element_duration;
3094 foreach ($totaltime as $taskid => $total_duration) {
3095 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"projet_task SET";
3096 $sql .=
" duration_effective = ".((int) $total_duration);
3097 $sql .=
" WHERE rowid = ".((int) $taskid);
3099 $resql = $db->query($sql);
3106 print $langs->trans(
'AlreadyDone').
"<br>\n";
3112 print $langs->trans(
'AlreadyDone').
"<br>\n";
3137 print
'<tr><td colspan="4">';
3140 print
'<b>'.$langs->trans(
'MigrationCustomerOrderShipping').
"</b><br>\n";
3144 $result1 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"ref_customer");
3145 $result2 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"date_delivery");
3146 $obj1 = $db->fetch_object($result1);
3147 $obj2 = $db->fetch_object($result2);
3148 if (!$obj1 && !$obj2) {
3153 $sqlAdd1 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN ref_customer varchar(30) AFTER entity";
3154 $sqlAdd2 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition";
3156 if ($db->query($sqlAdd1) && $db->query($sqlAdd2)) {
3157 $sqlSelect =
"SELECT e.rowid as shipping_id, c.ref_client, c.date_livraison as delivery_date";
3158 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"expedition as e";
3159 $sqlSelect .=
", ".MAIN_DB_PREFIX.
"element_element as el";
3160 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"commande as c ON c.rowid = el.fk_source AND el.sourcetype = 'commande'";
3161 $sqlSelect .=
" WHERE e.rowid = el.fk_target";
3162 $sqlSelect .=
" AND el.targettype = 'shipping'";
3164 $resql = $db->query($sqlSelect);
3167 $num = $db->num_rows($resql);
3171 $obj = $db->fetch_object($resql);
3173 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
3174 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_client).
"'";
3175 $sqlUpdate .=
", date_delivery = '".$db->escape($obj->delivery_date ? $obj->delivery_date :
'null').
"'";
3176 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->shipping_id);
3178 $result = $db->query($sqlUpdate);
3187 print $langs->trans(
'AlreadyDone').
"<br>\n";
3205 print $langs->trans(
'AlreadyDone').
"<br>\n";
3221 print
'<tr><td colspan="4">';
3224 print
'<b>'.$langs->trans(
'MigrationShippingDelivery').
"</b><br>\n";
3228 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_expedition");
3229 $obj = $db->fetch_object($result);
3235 $sqlSelect =
"SELECT rowid, fk_expedition";
3236 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
3237 $sqlSelect .=
" WHERE fk_expedition is not null";
3239 $resql = $db->query($sqlSelect);
3242 $num = $db->num_rows($resql);
3246 $obj = $db->fetch_object($resql);
3248 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
3249 $sqlInsert .=
"fk_source";
3250 $sqlInsert .=
", sourcetype";
3251 $sqlInsert .=
", fk_target";
3252 $sqlInsert .=
", targettype";
3253 $sqlInsert .=
") VALUES (";
3254 $sqlInsert .= $obj->fk_expedition;
3255 $sqlInsert .=
", 'shipping'";
3256 $sqlInsert .=
", ".$obj->rowid;
3257 $sqlInsert .=
", 'delivery'";
3260 $result = $db->query($sqlInsert);
3262 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET fk_expedition = NULL";
3263 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3265 $result = $db->query($sqlUpdate);
3278 print $langs->trans(
'AlreadyDone').
"<br>\n";
3282 $sqlDelete =
"DELETE FROM ".MAIN_DB_PREFIX.
"element_element WHERE sourcetype = 'commande' AND targettype = 'delivery'";
3283 $db->query($sqlDelete);
3288 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_expedition";
3289 $db->query($sqlDrop);
3299 print $langs->trans(
'AlreadyDone').
"<br>\n";
3316 print
'<tr><td colspan="4">';
3319 print
'<b>'.$langs->trans(
'MigrationShippingDelivery2').
"</b><br>\n";
3327 $sqlSelect =
"SELECT l.rowid as delivery_id, e.ref_customer, e.date_delivery";
3328 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l,";
3329 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"element_element as el,";
3330 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"expedition as e";
3331 $sqlSelect .=
" WHERE l.rowid = el.fk_target";
3332 $sqlSelect .=
" AND el.targettype = 'delivery'";
3333 $sqlSelect .=
" AND e.rowid = el.fk_source AND el.sourcetype = 'shipping'";
3334 $sqlSelect .=
" AND (e.ref_customer IS NOT NULL OR e.date_delivery IS NOT NULL)";
3336 $sqlSelect .=
" AND (l.ref_customer IS NULL".($db->type !=
'pgsql' ?
" or l.ref_customer = ''" :
"").
")";
3337 $sqlSelect .=
" AND (l.date_delivery IS NULL".($db->type !=
'pgsql' ?
" or l.date_delivery = ''" :
"").
")";
3339 $resql = $db->query($sqlSelect);
3342 $num = $db->num_rows($resql);
3346 $obj = $db->fetch_object($resql);
3348 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
3349 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_customer).
"',";
3350 $sqlUpdate .=
" date_delivery = ".($obj->date_delivery ?
"'".$db->escape($obj->date_delivery).
"'" :
'null');
3351 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->delivery_id);
3353 $result = $db->query($sqlUpdate);
3362 print $langs->trans(
'AlreadyDone').
"<br>\n";
3389 print
'<tr><td colspan="4">';
3392 print
'<b>'.$langs->trans(
'MigrationActioncommElement').
"</b><br>\n";
3395 'propal' =>
'propalrowid',
3396 'order' =>
'fk_commande',
3397 'invoice' =>
'fk_facture',
3398 'contract' =>
'fk_contract',
3399 'order_supplier' =>
'fk_supplier_order',
3400 'invoice_supplier' =>
'fk_supplier_invoice'
3403 foreach ($elements as $type => $field) {
3404 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"actioncomm", $field);
3405 $obj = $db->fetch_object($result);
3411 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"actioncomm SET ";
3412 $sql .=
"fk_element = ".$db->sanitize($field).
", elementtype = '".$db->escape($type).
"'";
3413 $sql .=
" WHERE ".$db->sanitize($field).
" IS NOT NULL";
3414 $sql .=
" AND fk_element IS NULL";
3415 $sql .=
" AND elementtype IS NULL";
3417 $resql = $db->query($sql);
3431 print $langs->trans(
'AlreadyDone').
"<br>\n";
3448 print
'<tr><td colspan="4">';
3451 print
'<b>'.$langs->trans(
'MigrationPaymentMode').
"</b><br>\n";
3454 'old_id' => array(5, 8, 9, 10, 11),
3455 'new_id' => array(50, 51, 52, 53, 54),
3456 'code' => array(
'VAD',
'TRA',
'LCR',
'FAC',
'PRO'),
3457 'tables' => array(
'commande_fournisseur',
'commande',
'facture_rec',
'facture',
'propal')
3461 foreach ($elements[
'old_id'] as $key => $old_id) {
3466 $sqlSelect =
"SELECT id";
3467 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"c_paiement";
3468 $sqlSelect .=
" WHERE id = ".((int) $old_id);
3469 $sqlSelect .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3471 $resql = $db->query($sqlSelect);
3473 $num = $db->num_rows($resql);
3479 $sqla =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET";
3480 $sqla .=
" fk_paiement = ".((int) $elements[
'new_id'][$key]);
3481 $sqla .=
" WHERE fk_paiement = ".((int) $old_id);
3482 $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]).
"')";
3483 $resqla = $db->query($sqla);
3485 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"c_paiement SET";
3486 $sql .=
" id = ".((int) $elements[
'new_id'][$key]);
3487 $sql .=
" WHERE id = ".((int) $old_id);
3488 $sql .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3489 $resql = $db->query($sql);
3491 if ($resqla && $resql) {
3492 foreach ($elements[
'tables'] as $table) {
3493 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table.
" SET ";
3494 $sql .=
"fk_mode_reglement = ".((int) $elements[
'new_id'][$key]);
3495 $sql .=
" WHERE fk_mode_reglement = ".((int) $old_id);
3497 $resql = $db->query($sql);
3520 print $langs->trans(
'AlreadyDone').
"<br>\n";
3538 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"categorie_association");
3540 $obj = $db->fetch_object($result);
3543 $children = array();
3544 $sql =
"SELECT fk_categorie_mere, fk_categorie_fille";
3545 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3547 $resql = $db->query($sql);
3549 $num = $db->num_rows($resql);
3550 while ($obj = $db->fetch_object($resql)) {
3551 if (!isset($children[$obj->fk_categorie_fille])) {
3552 if ($obj->fk_categorie_mere != $obj->fk_categorie_fille) {
3553 $children[$obj->fk_categorie_fille] = 1;
3554 $couples[$obj->fk_categorie_mere.
'_'.$obj->fk_categorie_fille] = array(
'mere' => $obj->fk_categorie_mere,
'fille' => $obj->fk_categorie_fille);
3562 if (count($couples) > 0 && $num > count($couples)) {
3568 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_association";
3570 $resqld = $db->query($sql);
3573 foreach ($couples as $key => $val) {
3574 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_association(fk_categorie_mere,fk_categorie_fille)";
3575 $sql .=
" VALUES(".((int) $val[
'mere']).
", ".((int) $val[
'fille']).
")";
3577 $resqli = $db->query($sql);
3585 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3586 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Success").
' ('.$num.
'=>'.count($couples).
')</td></tr>';
3589 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3590 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Failed").
'</td></tr>';
3595 print
'<tr><td>'.$langs->trans(
"Error").
'</td>';
3596 print
'<td class="right"><div class="error">'.$db->lasterror().
'</div></td></tr>';
3613 print
'<tr><td colspan="4">';
3616 print
'<b>'.$langs->trans(
'MigrationCategorieAssociation').
"</b><br>\n";
3620 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"categorie_association")) {
3625 $sqlSelect =
"SELECT fk_categorie_mere, fk_categorie_fille";
3626 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3628 $resql = $db->query($sqlSelect);
3631 $num = $db->num_rows($resql);
3635 $obj = $db->fetch_object($resql);
3637 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"categorie SET ";
3638 $sqlUpdate .=
"fk_parent = ".((int) $obj->fk_categorie_mere);
3639 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->fk_categorie_fille);
3641 $result = $db->query($sqlUpdate);
3650 print $langs->trans(
'AlreadyDone').
"<br>\n";
3663 print $langs->trans(
'AlreadyDone').
"<br>\n";
3679 print
'<tr><td colspan="4">';
3682 print
'<b>'.$langs->trans(
'MigrationEvents').
"</b><br>\n";
3690 $sqlSelect =
"SELECT a.id, a.fk_user_action";
3691 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3692 $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";
3693 $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')";
3694 $sqlSelect .=
" ORDER BY a.id";
3697 $resql = $db->query($sqlSelect);
3700 $num = $db->num_rows($resql);
3704 $obj = $db->fetch_object($resql);
3706 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3707 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'user', ".((int) $obj->fk_user_action).
")";
3709 $result = $db->query($sqlUpdate);
3718 print $langs->trans(
'AlreadyDone').
"<br>\n";
3745 print
'<tr><td colspan="4">';
3748 print
'<b>'.$langs->trans(
'MigrationEventsContact').
"</b><br>\n";
3756 $sqlSelect =
"SELECT a.id, a.fk_contact";
3757 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3758 $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";
3759 $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')";
3760 $sqlSelect .=
" ORDER BY a.id";
3763 $resql = $db->query($sqlSelect);
3766 $num = $db->num_rows($resql);
3770 $obj = $db->fetch_object($resql);
3772 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3773 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'socpeople', ".((int) $obj->fk_contact).
")";
3775 $result = $db->query($sqlUpdate);
3784 print $langs->trans(
'AlreadyDone').
"<br>\n";
3814 require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
3816 print
'<tr><td colspan="4">';
3819 print
'<b>'.$langs->trans(
'MigrationResetBlockedLog').
"</b><br>\n";
3827 $sqlSelect =
"SELECT DISTINCT entity";
3828 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"blockedlog";
3832 $resql = $db->query($sqlSelect);
3835 $num = $db->num_rows($resql);
3839 $obj = $db->fetch_object($resql);
3841 print
'Process entity '.$obj->entity;
3843 $sqlSearch =
"SELECT count(rowid) as nb FROM ".MAIN_DB_PREFIX.
"blockedlog WHERE action = 'MODULE_SET' and entity = ".((int) $obj->entity);
3844 $resqlSearch = $db->query($sqlSearch);
3846 $objSearch = $db->fetch_object($resqlSearch);
3848 if ($objSearch && $objSearch->nb == 0) {
3849 print
' - Record for entity must be reset...';
3851 $sqlUpdate =
"DELETE FROM ".MAIN_DB_PREFIX.
"blockedlog";
3852 $sqlUpdate .=
" WHERE entity = ".((int) $obj->entity);
3853 $resqlUpdate = $db->query($sqlUpdate);
3854 if (!$resqlUpdate) {
3863 $object->entity = $obj->entity;
3867 $b->setObjectData(
$object,
'MODULE_SET', 0, $user,
null);
3869 $res = $b->create($user);
3875 print
' - '.$langs->trans(
'AlreadyInV7').
'<br>';
3884 print $langs->trans(
'NothingToDo').
"<br>\n";
3911 print
'<tr><td colspan="4">';
3914 print
'<b>'.$langs->trans(
'MigrationRemiseEntity').
"</b><br>\n";
3922 $sqlSelect =
"SELECT sr.rowid, s.entity";
3923 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise as sr, ".MAIN_DB_PREFIX.
"societe as s";
3924 $sqlSelect .=
" WHERE sr.fk_soc = s.rowid and sr.entity != s.entity";
3928 $resql = $db->query($sqlSelect);
3931 $num = $db->num_rows($resql);
3935 $obj = $db->fetch_object($resql);
3937 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise SET";
3938 $sqlUpdate .=
" entity = ".$obj->entity;
3939 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3941 $result = $db->query($sqlUpdate);
3951 print $langs->trans(
'AlreadyDone').
"<br>\n";
3977 print
'<tr><td colspan="4">';
3980 print
'<b>'.$langs->trans(
'MigrationRemiseExceptEntity').
"</b><br>\n";
3988 $sqlSelect =
"SELECT sr.rowid, sr.fk_soc, sr.fk_facture_source, sr.fk_facture, sr.fk_facture_line";
3989 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as sr";
3992 $resql = $db->query($sqlSelect);
3995 $num = $db->num_rows($resql);
3999 $obj = $db->fetch_object($resql);
4001 if (!empty($obj->fk_facture_source) || !empty($obj->fk_facture)) {
4002 $fk_facture = (!empty($obj->fk_facture_source) ? $obj->fk_facture_source : $obj->fk_facture);
4004 $sqlSelect2 =
"SELECT f.entity";
4005 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f";
4006 $sqlSelect2 .=
" WHERE f.rowid = ".((int) $fk_facture);
4007 } elseif (!empty($obj->fk_facture_line)) {
4008 $sqlSelect2 =
"SELECT f.entity";
4009 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f, ".MAIN_DB_PREFIX.
"facturedet as fd";
4010 $sqlSelect2 .=
" WHERE fd.rowid = ".((int) $obj->fk_facture_line);
4011 $sqlSelect2 .=
" AND fd.fk_facture = f.rowid";
4013 $sqlSelect2 =
"SELECT s.entity";
4014 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
4015 $sqlSelect2 .=
" WHERE s.rowid = ".((int) $obj->fk_soc);
4018 $resql2 = $db->query($sqlSelect2);
4020 if ($db->num_rows($resql2) > 0) {
4021 $obj2 = $db->fetch_object($resql2);
4023 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise_except SET";
4024 $sqlUpdate .=
" entity = ".((int) $obj2->entity);
4025 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
4027 $result = $db->query($sqlUpdate);
4042 print $langs->trans(
'AlreadyDone').
"<br>\n";
4069 print
'<tr><td colspan="4">';
4071 print
'<b>'.$langs->trans(
'MigrationUserRightsEntity').
"</b><br>\n";
4079 $sqlSelect =
"SELECT u.rowid, u.entity";
4080 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"user as u";
4081 $sqlSelect .=
" WHERE u.entity > 1";
4084 $resql = $db->query($sqlSelect);
4087 $num = $db->num_rows($resql);
4091 $obj = $db->fetch_object($resql);
4093 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"user_rights SET";
4094 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4095 $sqlUpdate .=
" WHERE fk_user = ".((int) $obj->rowid);
4097 $result = $db->query($sqlUpdate);
4107 print $langs->trans(
'AlreadyDone').
"<br>\n";
4134 print
'<tr><td colspan="4">';
4136 print
'<b>'.$langs->trans(
'MigrationUserGroupRightsEntity').
"</b><br>\n";
4144 $sqlSelect =
"SELECT u.rowid, u.entity";
4145 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"usergroup as u";
4146 $sqlSelect .=
" WHERE u.entity > 1";
4149 $resql = $db->query($sqlSelect);
4152 $num = $db->num_rows($resql);
4156 $obj = $db->fetch_object($resql);
4158 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"usergroup_rights SET";
4159 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4160 $sqlUpdate .=
" WHERE fk_usergroup = ".((int) $obj->rowid);
4162 $result = $db->query($sqlUpdate);
4172 print $langs->trans(
'AlreadyDone').
"<br>\n";
4203 if (is_dir(DOL_DATA_ROOT.$oldname) && !file_exists(DOL_DATA_ROOT.$newname)) {
4204 dolibarr_install_syslog(
"upgrade2::migrate_rename_directories move ".DOL_DATA_ROOT.$oldname.
' into '.DOL_DATA_ROOT.$newname);
4205 @rename(DOL_DATA_ROOT.$oldname, DOL_DATA_ROOT.$newname);
4225 $filetodeletearray = array(
4226 '/core/ajax/ajaxcompanies.php',
4227 '/core/triggers/interface_demo.class.php',
4228 '/core/menus/barre_left/default.php',
4229 '/core/menus/barre_top/default.php',
4230 '/core/modules/modComptabiliteExpert.class.php',
4231 '/core/modules/modCommercial.class.php',
4232 '/core/modules/modProduit.class.php',
4233 '/core/modules/modSkype.class.php',
4234 '/core/modules/modactivite.class.php',
4235 '/core/triggers/interface_modWebcalendar_Webcalsynchro.class.php',
4236 '/core/triggers/interface_modCommande_Ecotax.class.php',
4237 '/core/triggers/interface_modCommande_fraisport.class.php',
4238 '/core/triggers/interface_modPropale_PropalWorkflow.class.php',
4239 '/core/triggers/interface_99_modWebhook_WebhookTriggers.class.php',
4240 '/core/triggers/interface_99_modZapier_ZapierTriggers.class.php',
4241 '/core/menus/smartphone/iphone.lib.php',
4242 '/core/menus/smartphone/iphone_backoffice.php',
4243 '/core/menus/smartphone/iphone_frontoffice.php',
4244 '/core/menus/standard/auguria_backoffice.php',
4245 '/core/menus/standard/auguria_frontoffice.php',
4246 '/core/menus/standard/eldy_backoffice.php',
4247 '/core/menus/standard/eldy_frontoffice.php',
4248 '/core/modules/export/export_excel.modules.php',
4249 '/core/modules/export/export_csv.modules.php',
4250 '/core/modules/export/exportcsv.modules.php',
4251 '/core/modules/export/export_excel2007new.modules.php',
4252 '/core/modules/facture/pdf_crabe.modules.php',
4253 '/core/modules/facture/pdf_oursin.modules.php',
4254 '/core/modules/mailings/contacts2.modules.php',
4255 '/core/modules/mailings/contacts3.modules.php',
4256 '/core/modules/mailings/contacts4.modules.php',
4257 '/core/modules/mailings/framboise.modules.php',
4258 '/core/modules/mailings/dolibarr_services_expired.modules.php',
4259 '/core/modules/mailings/peche.modules.php',
4260 '/core/modules/mailings/poire.modules.php',
4261 '/core/modules/mailings/kiwi.modules.php',
4262 '/core/modules/syslog/mod_syslog_chromephp.php',
4263 '/core/modules/syslog/mod_syslog_firephp.php',
4264 '/core/modules/syslog/logHandlerInterface.php',
4265 '/core/boxes/box_members.php',
4267 '/includes/restler/framework/Luracast/Restler/Data/Object.php',
4268 '/includes/nusoap/lib/class.*',
4269 '/phenix/inc/triggers/interface_modPhenix_Phenixsynchro.class.php',
4270 '/webcalendar/inc/triggers/interface_modWebcalendar_webcalsynchro.class.php',
4272 '/api/class/api_generic.class.php',
4273 '/asterisk/cidlookup.php',
4274 '/categories/class/api_category.class.php',
4275 '/categories/class/api_deprecated_category.class.php',
4276 '/compta/facture/class/api_invoice.class.php',
4277 '/commande/class/api_commande.class.php',
4278 '/partnership/class/api_partnership.class.php',
4279 '/product/class/api_product.class.php',
4280 '/recruitment/class/api_recruitment.class.php',
4281 '/societe/class/api_contact.class.php',
4282 '/societe/class/api_thirdparty.class.php',
4283 '/support/online.php',
4284 '/takepos/class/actions_takepos.class.php',
4285 '/user/class/api_user.class.php',
4287 '/install/mysql/tables/llx_c_ticketsup_category.key.sql',
4288 '/install/mysql/tables/llx_c_ticketsup_category.sql',
4289 '/install/mysql/tables/llx_c_ticketsup_severity.key.sql',
4290 '/install/mysql/tables/llx_c_ticketsup_severity.sql',
4291 '/install/mysql/tables/llx_c_ticketsup_type.key.sql',
4292 '/install/mysql/tables/llx_c_ticketsup_type.sql'
4301 foreach ($filetodeletearray as $filetodelete) {
4303 if (preg_match(
'/\*/', $filetodelete) || file_exists(DOL_DOCUMENT_ROOT.$filetodelete)) {
4305 $result =
dol_delete_file(DOL_DOCUMENT_ROOT.$filetodelete, 0, (preg_match(
'/\*/', $filetodelete) ? 1 : 0), 0,
null,
true, 0);
4307 $langs->load(
"errors");
4308 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteFile", DOL_DOCUMENT_ROOT.$filetodelete);
4309 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4334 $filetodeletearray = array(
4335 DOL_DOCUMENT_ROOT.
'/core/modules/facture/terre',
4336 DOL_DOCUMENT_ROOT.
'/core/modules/facture/mercure',
4340 if (!empty($_SERVER[
"WINDIR"])) {
4341 $filetodeletearray[] = DOL_DOCUMENT_ROOT.
'/includes/phpoffice/PhpSpreadsheet';
4344 foreach ($filetodeletearray as $filetodelete) {
4346 if (file_exists($filetodelete)) {
4350 $langs->load(
"errors");
4351 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteDir", $filetodelete);
4352 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4376 if (count($listofmodule) == 0) {
4380 if (!is_object($user)) {
4381 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4382 $user =
new User($db);
4385 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules force=".$force.
", listofmodule=".implode(
',', array_keys($listofmodule)), LOG_NOTICE);
4387 $reloadactionformodules = array(
4388 'MAIN_MODULE_AGENDA' => array(
'class' =>
'modAgenda',
'remove' => 1),
4389 'MAIN_MODULE_API' => array(
'class' =>
'modApi'),
4390 'MAIN_MODULE_BARCODE' => array(
'class' =>
'modBarcode',
'remove' => 1),
4391 'MAIN_MODULE_BLOCKEDLOG' => array(
'class' =>
'modBlockedLog',
'deleteinsertmenus' => 1),
4392 'MAIN_MODULE_CRON' => array(
'class' =>
'modCron',
'remove' => 1),
4393 'MAIN_MODULE_SOCIETE' => array(
'class' =>
'modSociete',
'remove' => 1),
4394 'MAIN_MODULE_PRODUIT' => array(
'class' =>
'modProduct'),
4395 'MAIN_MODULE_SERVICE' => array(
'class' =>
'modService'),
4396 'MAIN_MODULE_COMMANDE' => array(
'class' =>
'modCommande'),
4397 'MAIN_MODULE_DON' => array(
'class' =>
'modDon'),
4398 'MAIN_MODULE_FACTURE' => array(
'class' =>
'modFacture'),
4399 'MAIN_MODULE_FICHEINTER' => array(
'class' =>
'modFicheinter'),
4400 'MAIN_MODULE_FOURNISSEUR' => array(
'class' =>
'modFournisseur'),
4401 'MAIN_MODULE_EXPEDITION' => array(
'class' =>
'modExpedition'),
4402 'MAIN_MODULE_EXPENSEREPORT' => array(
'class' =>
'modExpenseReport'),
4403 'MAIN_MODULE_EVENTORGANIZATION' => array(
'class' =>
'modEventOrganization',
'remove' => 1),
4404 'MAIN_MODULE_ECM' => array(
'class' =>
'modECM',
'remove' => 1),
4405 'MAIN_MODULE_HOLIDAY' => array(
'class' =>
'modHoliday',
'remove' => 1),
4406 'MAIN_MODULE_KNOWLEDGEMANAGEMENT' => array(
'class' =>
'modKnowledgeManagement',
'remove' => 1),
4407 'MAIN_MODULE_LOAN' => array(
'class' =>
'modLoan',
'remove' => 1),
4408 'MAIN_MODULE_PAYBOX' => array(
'class' =>
'modPaybox',
'remove' => 1),
4409 'MAIN_MODULE_PROPAL' => array(
'class' =>
'modPropale'),
4410 'MAIN_MODULE_SUPPLIERPROPOSAL' => array(
'class' =>
'modSupplierProposal',
'remove' => 1),
4411 'MAIN_MODULE_OPENSURVEY' => array(
'class' =>
'modOpenSurvey',
'remove' => 1),
4412 'MAIN_MODULE_PRODUCTBATCH' => array(
'class' =>
'modProductBatch',
'remove' => 1),
4413 'MAIN_MODULE_TAKEPOS' => array(
'class' =>
'modTakePos',
'remove' => 1),
4414 'MAIN_MODULE_VARIANTS' => array(
'class' =>
'modVariants',
'remove' => 1),
4415 'MAIN_MODULE_EMAILCOLLECTOR' => array(
'class' =>
'modEmailCollector',
'remove' => 1),
4418 foreach ($listofmodule as $moduletoreload => $reloadmode) {
4419 $modulekey = preg_replace(
'/^MAIN_MODULE_/',
'', $moduletoreload);
4421 if (empty($moduletoreload) || (!
isModEnabled(strtolower($modulekey)) && !$force)) {
4427 if (!empty($reloadactionformodules[$moduletoreload])) {
4428 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreload.
" with mode ".$reloadmode);
4430 $val = $reloadactionformodules[$moduletoreload];
4431 $classformodule = $val[
'class'];
4432 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/'.$classformodule.
'.class.php';
4434 $mod =
new $classformodule($db);
4435 if (!empty($val[
'remove'])) {
4436 $mod->remove(
'noboxes');
4438 if (!empty($val[
'deleteinsertmenus'])) {
4440 $mod->delete_menus();
4441 $mod->insert_menus();
4443 $mod->init($reloadmode);
4448 preg_match(
'/([a-zA-Z0-9]+)/', $modulekey, $reg);
4449 if (!empty($reg[1])) {
4450 if (strtoupper($moduletoreload) == $moduletoreload) {
4451 $moduletoreloadshort = ucfirst(strtolower($reg[1]));
4453 $moduletoreloadshort = $reg[1];
4456 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreloadshort.
" with mode ".$reloadmode.
" (generic code)", LOG_NOTICE);
4458 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php';
4460 $classname =
'mod'.$moduletoreloadshort;
4461 $mod =
new $classname($db);
4462 '@phan-var-force DolibarrModules $mod';
4465 $mod->delete_menus();
4466 $mod->init($reloadmode);
4468 dolibarr_install_syslog(
'Failed to include '.DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4470 $res = @
dol_include_once(strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4472 $classname =
'mod'.$moduletoreloadshort;
4473 $mod =
new $classname($db);
4474 '@phan-var-force DolibarrModules $mod';
4475 $mod->init($reloadmode);
4477 dolibarr_install_syslog(
'Failed to include '.strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4478 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4484 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4489 if (!empty($mod) && is_object($mod)) {
4490 print
'<tr class="trforrunsql"><td colspan="4">';
4491 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: ';
4492 print $langs->trans(
'MigrationReloadModule').
' '.$mod->getName();
4493 print
"<!-- (".$reloadmode.
") -->";
4518 $listofmenuhandler = array();
4521 $listofmenuhandler[
'auguria'] = 1;
4524 foreach ($listofmenuhandler as $key => $val) {
4525 print
'<tr class="trforrunsql"><td colspan="4">';
4529 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: '.$langs->trans(
'MenuHandler').
" ".$key.
"<br>\n";
4532 $dir = DOL_DOCUMENT_ROOT.
"/core/menus/";
4533 $file =
'init_menu_'.$key.
'.sql';
4534 if (file_exists($dir.$file)) {
4535 $result =
run_sql($dir.$file, 1, 0, 1, $key);
4551 global $conf, $db, $langs, $user;
4553 if (!is_object($user)) {
4554 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4555 $user =
new User($db);
4558 print
'<tr><td colspan="4">';
4560 print
'<b>'.$langs->trans(
'MigrationProductLotPath').
"</b><br>\n";
4562 $sql =
"SELECT rowid, entity, batch, fk_product from ".MAIN_DB_PREFIX.
"product_lot";
4563 $resql = $db->query($sql);
4566 $modulepart=
"product_batch";
4570 while ($obj = $db->fetch_object($resql)) {
4571 $entity = (empty($obj->entity) ? 1 : $obj->entity);
4573 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/'.$conf->productbatch->multidir_output[$entity];
4575 $dir = $conf->productbatch->multidir_output[$entity];
4579 $lot->id = (int) $obj->rowid;
4580 $lot->ref = (string) $obj->rowid;
4581 $lot->batch = $obj->batch;
4582 $lot->entity = $obj->entity;
4583 $lot->fk_product = $obj->fk_product;
4585 $savref = $lot->ref;
4587 $lot->ref = $obj->batch;
4588 $origin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4590 $lot->ref = $savref;
4591 $destin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4613 global $conf, $db, $langs, $user;
4615 print
'<tr><td colspan="4">';
4617 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4619 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4620 $fuser =
new User($db);
4621 if (!is_object($user)) {
4625 $sql =
"SELECT rowid as uid, entity from ".MAIN_DB_PREFIX.
"user";
4626 $resql = $db->query($sql);
4628 while ($obj = $db->fetch_object($resql)) {
4630 $fuser->id = $obj->uid;
4631 $fuser->entity = $obj->entity;
4634 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4636 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4638 $dir = $conf->user->multidir_output[$entity];
4643 $origin = $dir.
'/'.
get_exdir($fuser->id, 2, 0, 1, $fuser,
'user');
4644 $destin = $dir.
'/'.$fuser->id;
4652 $handle = opendir($origin_osencoded);
4653 if (is_resource($handle)) {
4654 while (($file = readdir($handle)) !==
false) {
4655 if ($file ==
'.' || $file ==
'..') {
4660 $thumbs = opendir($origin_osencoded.
'/'.$file);
4661 if (is_resource($thumbs)) {
4663 while (($thumb = readdir($thumbs)) !==
false) {
4665 if ($thumb ==
'.' || $thumb ==
'..') {
4671 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4681 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4702 global $db, $langs, $user;
4704 print
'<tr><td colspan="4">';
4706 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4708 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4709 $fuser =
new User($db);
4710 if (!is_object($user)) {
4714 $sql =
"SELECT rowid as uid, entity, photo from ".MAIN_DB_PREFIX.
"user";
4715 $resql = $db->query($sql);
4717 while ($obj = $db->fetch_object($resql)) {
4719 $fuser->id = $obj->uid;
4720 $fuser->entity = $obj->entity;
4721 $fuser->photo = $obj->photo;
4724 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4726 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4728 $dir = DOL_DATA_ROOT.
'/users';
4733 $origin = $dir.
'/'.$fuser->id;
4734 $destin = $dir.
'/'.$fuser->id.
'/photos';
4742 $handle = opendir($origin_osencoded);
4743 if (is_resource($handle)) {
4744 while (($file = readdir($handle)) !==
false) {
4745 if ($file ==
'.' || $file ==
'..' || $file ==
'photos') {
4748 if (!empty($fuser->photo) && ($file != $fuser->photo && $file !=
'thumbs')) {
4753 $thumbs = opendir($origin_osencoded.
'/'.$file);
4754 if (is_resource($thumbs)) {
4756 while (($thumb = readdir($thumbs)) !==
false) {
4758 if ($thumb ==
'.' || $thumb ==
'..') {
4764 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4773 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4795 global $conf, $db, $langs;
4797 print
'<tr class="trforrunsql"><td>';
4799 print
'<b>'.$langs->trans(
'MigrationHolidayPath').
"</b><br>\n";
4801 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
4804 $sql =
"SELECT rowid as uid, ref, entity from ".MAIN_DB_PREFIX.
"holiday";
4806 $resql = $db->query($sql);
4808 while ($obj = $db->fetch_object($resql)) {
4810 $holiday->id = $obj->uid;
4811 $holiday->ref = $obj->ref;
4812 $holiday->entity = $obj->entity;
4815 $entity = (empty($holiday->entity) ? 1 : $holiday->entity);
4817 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/holiday';
4819 $dir = $conf->holiday->multidir_output[$entity];
4824 $origin = $dir.
'/'.
get_exdir($holiday->id, 2, 0, 1, $holiday,
'holiday');
4825 $destin = $dir.
'/'.$holiday->ref;
4833 $handle = opendir($origin_osencoded);
4834 if (is_resource($handle)) {
4835 while (($file = readdir($handle)) !==
false) {
4836 if ($file ==
'.' || $file ==
'..') {
4841 $thumbs = opendir($origin_osencoded.
'/'.$file);
4842 if (is_resource($thumbs)) {
4844 while (($thumb = readdir($thumbs)) !==
false) {
4846 if ($thumb ==
'.' || $thumb ==
'..') {
4852 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4862 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4900 print
'<tr><td colspan="4">';
4901 $sql =
'SELECT rowid, socialnetworks';
4902 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'user WHERE';
4903 $sql .=
" skype IS NOT NULL OR skype <> ''";
4904 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4905 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4906 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4907 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4908 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4909 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4910 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4911 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4913 $resql = $db->query($sql);
4915 while ($obj = $db->fetch_object($resql)) {
4916 $arraysocialnetworks = array();
4917 if (!empty($obj->skype)) {
4918 $arraysocialnetworks[
'skype'] = $obj->skype;
4920 if (!empty($obj->twitter)) {
4921 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4923 if (!empty($obj->facebook)) {
4924 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4926 if (!empty($obj->linkedin)) {
4927 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4929 if (!empty($obj->instagram)) {
4930 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4932 if (!empty($obj->snapchat)) {
4933 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4935 if (!empty($obj->googleplus)) {
4936 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4938 if (!empty($obj->youtube)) {
4939 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4941 if (!empty($obj->whatsapp)) {
4942 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4944 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4945 $obj->socialnetworks =
'[]';
4947 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4948 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"user SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
4949 $sqlupd .=
', skype=null';
4950 $sqlupd .=
', twitter=null';
4951 $sqlupd .=
', facebook=null';
4952 $sqlupd .=
', linkedin=null';
4953 $sqlupd .=
', instagram=null';
4954 $sqlupd .=
', snapchat=null';
4955 $sqlupd .=
', googleplus=null';
4956 $sqlupd .=
', youtube=null';
4957 $sqlupd .=
', whatsapp=null';
4958 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4960 $resqlupd = $db->query($sqlupd);
4975 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Users').
"</b><br>\n";
4989 print
'<tr><td colspan="4">';
4992 print
'<tr><td colspan="4">';
4993 $sql =
'SELECT rowid, socialnetworks';
4994 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'adherent WHERE ';
4995 $sql .=
" skype IS NOT NULL OR skype <> ''";
4996 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4997 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4998 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4999 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5000 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5001 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5002 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5003 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5005 $resql = $db->query($sql);
5007 while ($obj = $db->fetch_object($resql)) {
5008 $arraysocialnetworks = array();
5009 if (!empty($obj->skype)) {
5010 $arraysocialnetworks[
'skype'] = $obj->skype;
5012 if (!empty($obj->twitter)) {
5013 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5015 if (!empty($obj->facebook)) {
5016 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5018 if (!empty($obj->linkedin)) {
5019 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5021 if (!empty($obj->instagram)) {
5022 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5024 if (!empty($obj->snapchat)) {
5025 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5027 if (!empty($obj->googleplus)) {
5028 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5030 if (!empty($obj->youtube)) {
5031 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5033 if (!empty($obj->whatsapp)) {
5034 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5036 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5037 $obj->socialnetworks =
'[]';
5039 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5040 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"adherent SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
5041 $sqlupd .=
', skype=null';
5042 $sqlupd .=
', twitter=null';
5043 $sqlupd .=
', facebook=null';
5044 $sqlupd .=
', linkedin=null';
5045 $sqlupd .=
', instagram=null';
5046 $sqlupd .=
', snapchat=null';
5047 $sqlupd .=
', googleplus=null';
5048 $sqlupd .=
', youtube=null';
5049 $sqlupd .=
', whatsapp=null';
5050 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5052 $resqlupd = $db->query($sqlupd);
5067 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Members').
"</b><br>\n";
5083 print
'<tr><td colspan="4">';
5084 $sql =
'SELECT rowid, socialnetworks';
5085 $sql .=
', jabberid, skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'socpeople WHERE';
5086 $sql .=
" jabberid IS NOT NULL OR jabberid <> ''";
5087 $sql .=
" OR skype IS NOT NULL OR skype <> ''";
5088 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5089 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5090 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5091 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5092 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5093 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5094 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5095 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5097 $resql = $db->query($sql);
5099 while ($obj = $db->fetch_object($resql)) {
5100 $arraysocialnetworks = array();
5101 if (!empty($obj->jabberid)) {
5102 $arraysocialnetworks[
'jabber'] = $obj->jabberid;
5104 if (!empty($obj->skype)) {
5105 $arraysocialnetworks[
'skype'] = $obj->skype;
5107 if (!empty($obj->twitter)) {
5108 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5110 if (!empty($obj->facebook)) {
5111 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5113 if (!empty($obj->linkedin)) {
5114 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5116 if (!empty($obj->instagram)) {
5117 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5119 if (!empty($obj->snapchat)) {
5120 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5122 if (!empty($obj->googleplus)) {
5123 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5125 if (!empty($obj->youtube)) {
5126 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5128 if (!empty($obj->whatsapp)) {
5129 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5131 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5132 $obj->socialnetworks =
'[]';
5134 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5135 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"socpeople SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
5136 $sqlupd .=
', jabberid=null';
5137 $sqlupd .=
', skype=null';
5138 $sqlupd .=
', twitter=null';
5139 $sqlupd .=
', facebook=null';
5140 $sqlupd .=
', linkedin=null';
5141 $sqlupd .=
', instagram=null';
5142 $sqlupd .=
', snapchat=null';
5143 $sqlupd .=
', googleplus=null';
5144 $sqlupd .=
', youtube=null';
5145 $sqlupd .=
', whatsapp=null';
5146 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5148 $resqlupd = $db->query($sqlupd);
5163 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Contacts').
"</b><br>\n";
5179 print
'<tr><td colspan="4">';
5180 $sql =
'SELECT rowid, socialnetworks';
5181 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'societe WHERE ';
5182 $sql .=
" skype IS NOT NULL OR skype <> ''";
5183 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5184 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5185 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5186 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5187 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5188 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5189 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5190 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5192 $resql = $db->query($sql);
5194 while ($obj = $db->fetch_object($resql)) {
5195 $arraysocialnetworks = array();
5196 if (!empty($obj->skype)) {
5197 $arraysocialnetworks[
'skype'] = $obj->skype;
5199 if (!empty($obj->twitter)) {
5200 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5202 if (!empty($obj->facebook)) {
5203 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5205 if (!empty($obj->linkedin)) {
5206 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5208 if (!empty($obj->instagram)) {
5209 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5211 if (!empty($obj->snapchat)) {
5212 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5214 if (!empty($obj->googleplus)) {
5215 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5217 if (!empty($obj->youtube)) {
5218 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5220 if (!empty($obj->whatsapp)) {
5221 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5223 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5224 $obj->socialnetworks =
'[]';
5226 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5227 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"societe SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
5228 $sqlupd .=
', skype=null';
5229 $sqlupd .=
', twitter=null';
5230 $sqlupd .=
', facebook=null';
5231 $sqlupd .=
', linkedin=null';
5232 $sqlupd .=
', instagram=null';
5233 $sqlupd .=
', snapchat=null';
5234 $sqlupd .=
', googleplus=null';
5235 $sqlupd .=
', youtube=null';
5236 $sqlupd .=
', whatsapp=null';
5237 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5239 $resqlupd = $db->query($sqlupd);
5254 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Thirdparties').
"</b><br>\n";
5274 print
'<tr class="trforrunsql"><td colspan="4">';
5275 $sql =
'SELECT rowid, field';
5276 if ($mode ==
'export') {
5279 $sql .=
' FROM '.MAIN_DB_PREFIX.$mode.
'_model WHERE';
5280 $sql .=
" type LIKE 'propale_%' OR type LIKE 'commande_%' OR type LIKE 'facture_%'";
5282 $resql = $db->query($sql);
5284 while ($obj = $db->fetch_object($resql)) {
5285 $oldfield = $obj->field;
5286 $newfield = str_replace(array(
',f.facnumber',
'f.facnumber,',
'f.total,',
'f.tva,'), array(
',f.ref',
'f.ref,',
'f.total_ht,',
'f.total_tva,'), $oldfield);
5288 if ($mode ==
'export') {
5289 $oldfilter = $obj->filter;
5290 $newfilter = str_replace(array(
'f.facnumber=',
'f.total=',
'f.tva='), array(
'f.ref=',
'f.total_ht=',
'f.total_tva='), $oldfilter);
5296 if ($oldfield != $newfield || $oldfilter != $newfilter) {
5297 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.$mode.
"_model SET field = '".$db->escape($newfield).
"'";
5298 if ($mode ==
'export') {
5299 $sqlupd .=
", filter = '".$db->escape($newfilter).
"'";
5301 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5302 $resultstring .=
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$sqlupd.
"</td></tr>\n";
5303 $resqlupd = $db->query($sqlupd);
5319 print
'<b>'.$langs->trans(
'MigrationImportOrExportProfiles', $mode).
"</b><br>\n";
5322 if ($resultstring) {
5323 print $resultstring;
5325 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5342 print
'<tr class="trforrunsql"><td colspan="4">';
5343 print
'<b>'.$langs->trans(
'MigrationContractLineRank').
"</b><br>\n";
5345 $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";
5346 $sql .=
" ORDER BY c.rowid,cd.rowid";
5348 $resql = $db->query($sql);
5351 $current_contract = 0;
5352 while ($obj = $db->fetch_object($resql)) {
5353 if (empty($current_contract) || $current_contract == $obj->cid) {
5359 $sqlUpd =
"UPDATE ".$db->prefix().
"contratdet SET rang=".(int) $currentRank.
" WHERE rowid=".(
int) $obj->cdid;
5360 $resultstring =
'.';
5361 print $resultstring;
5362 $resqlUpd = $db->query($sqlUpd);
5368 $current_contract = $obj->cid;
5381 if (!$resultstring) {
5382 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5397 $firstInstallVersion =
getDolGlobalString(
'MAIN_VERSION_FIRST_INSTALL', DOL_VERSION);
5398 $migrationNeeded = (
versioncompare(explode(
'.', $firstInstallVersion, 3), array(20, 0, -5)) < 0 && !$lock);
5400 print
'<tr class="trforrunsql"><td colspan="4">';
5401 print
'<b>'.$langs->trans(
'InvoiceExportModelsMigration').
"</b>: \n";
5403 if (! $migrationNeeded) {
5404 print $langs->trans(
"AlreadyDone");
5406 dolibarr_set_const($db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5413 $sql1 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_0' WHERE type = 'facture_1'";
5415 $resql1 = $db->query($sql1);
5424 $modified1 = $db->affected_rows($resql1);
5426 print str_repeat(
'.', $modified1);
5430 $sql2 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_1' WHERE type = 'facture_2'";
5432 $resql2 = $db->query($sql2);
5441 $modified2 = $db->affected_rows($resql2);
5443 print str_repeat(
'.', $modified2);
5447 if (empty($modified1 + $modified2)) {
5448 print $langs->trans(
'NothingToDo');
5453 dolibarr_set_const($db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5470 $bookKeepingAddon =
'';
5474 dolibarr_set_const($db,
'BOOKKEEPING_ADDON',
'mod_bookkeeping_neon',
'chaine', 0,
'', $entity);
5475 $bookKeepingAddon =
'mod_bookkeeping_neon';
5478 print
'<tr class="trforrunsql"><td colspan="4">';
5479 print
'<b>'.$langs->trans(
'MigrationAccountancyBookkeeping').
"</b><br>\n";
5482 if ($bookKeepingAddon ===
'mod_bookkeeping_argon') {
5485 $sql =
"SELECT DISTINCT YEAR(doc_date) as doc_year, MONTH(doc_date) as doc_month, code_journal, piece_num FROM ".$db->prefix().
"accounting_bookkeeping";
5486 $sql .=
" WHERE ref IS NULL AND entity = ".((int) $entity);
5487 $sql .=
" ORDER BY doc_year, doc_month, code_journal, piece_num";
5489 $resql = $db->query($sql);
5491 require_once DOL_DOCUMENT_ROOT .
'/accountancy/class/bookkeeping.class.php';
5494 while ($obj = $db->fetch_object($resql)) {
5495 $bookkeeping->doc_date =
dol_mktime(0, 0, 0, $obj->doc_month, 1, $obj->doc_year);
5496 $bookkeeping->code_journal = $obj->code_journal;
5497 $ref = $bookkeeping->getNextNumRef();
5499 $sqlUpd =
"UPDATE ".$db->prefix().
"accounting_bookkeeping SET ref = '".$db->escape($ref).
"' WHERE piece_num = '".$db->escape($obj->piece_num).
"' AND entity = ".((int) $entity);
5500 $resultstring =
'.';
5501 print $resultstring;
5502 $resqlUpd = $db->query($sqlUpd);
5521 if (!$resultstring) {
5522 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5533 global $conf, $db, $langs;
5535 print
'<tr class="trforrunsql"><td colspan="4">';
5536 print
'<b>'.$langs->trans(
'MigrationApiRestTokens').
"</b>:\n";
5540 $allexistingtokens = array();
5544 $sqlforalltokens =
"SELECT oat.tokenstring";
5545 $sqlforalltokens .=
" FROM ".$db->prefix().
"oauth_token AS oat";
5546 $sqlforalltokens .=
" WHERE oat.service = 'dolibarr_rest_api'";
5548 $resalltoken = $db->query($sqlforalltokens);
5551 while ($tokenobj = $db->fetch_object($resalltoken)) {
5552 $allexistingtokens[] =
dolDecrypt($tokenobj->tokenstring);
5561 $sql =
"SELECT 'dolibarr_rest_api' AS service, u.api_key AS tokenstring, u.rowid AS fk_user, u.entity";
5562 $sql .=
" FROM llx_user AS u";
5563 $sql .=
" WHERE u.api_key IS NOT NULL AND u.api_key <> ''";
5565 $result = $db->query($sql);
5568 $tmpuser =
new User($db);
5570 while ($obj = $db->fetch_object($result)) {
5571 if (!in_array(
dolDecrypt($obj->tokenstring), $allexistingtokens)) {
5573 unset($tmpuser->conf); $tmpuser->conf =
new stdClass();
5574 $tmpuser->fetch((
int) $obj->fk_user,
'',
'', 1, ($obj->entity ? $obj->entity : $conf->entity));
5576 $sqlforinsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"oauth_token (service, tokenstring, fk_user, datec, entity, apicount_total)";
5577 $sqlforinsert .=
" VALUES ('".$db->escape($obj->service).
"', '".$db->escape(
dolEncrypt(
dolDecrypt($obj->tokenstring))).
"', ";
5578 $sqlforinsert .= ((int) $obj->fk_user).
", '".$db->idate(
dol_now()).
"', ".((
int) $obj->entity).
", ";
5579 $sqlforinsert .=
getDolUserInt(
'API_COUNT_CALL', 0, $tmpuser);
5580 $sqlforinsert .=
")";
5582 $insertresult = $db->query($sqlforinsert);
5583 if (!$insertresult) {
5603 if (!$nbofmigration) {
5604 print $langs->trans(
"NothingToDo").
"\n";
5606 print $langs->trans(
'MigratedTokens', $nbofmigration);
5619 global $conf, $db, $langs;
5621 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security.lib.php';
5622 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
5624 print
'<tr class="trforrunsql"><td colspan="4">';
5625 print
'<b>'.$langs->trans(
'InitAHMACKeyForBlockedLog').
"</b>:\n";
5631 if (empty($hmac_encoded_secret_key)) {
5633 $hmac_secret_key =
'BLOCKEDLOGHMAC'.getRandomPassword(
true);
5635 $result =
dolibarr_set_const($db,
'BLOCKEDLOG_HMAC_KEY', $hmac_secret_key,
'chaine', 0,
'The secret key for HMAC used for blockedlog record', 0);
5645 print $langs->trans(
'Done');
5648 $hmac_secret_key =
dolDecrypt($hmac_encoded_secret_key);
5650 if (! preg_match(
'/^BLOCKEDLOGHMAC/', $hmac_secret_key)) {
5651 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.';
5652 print
'Restore the value of $dolibarr_main_crypt_key that was used for encryption in database and restart the migration.';
5653 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.';
5660 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,...
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.
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.
if(getDolGlobalString( 'TAKEPOS_SHOW_CUSTOMER')) print $langs trans('Date')." left 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 PaymentTypeShortLIQ right SELECT p pos_change as p datep as p p num_paiement as f pf amount as amount
dolEncrypt($chain, $key='', $ciphering='', $forceseed='')
Encode a string with a symmetric encryption.
dol_decode($chain, $key='1')
Decode a base 64 encoded + specific delta change.
dolDecrypt($chain, $key='')
Decode a string with a symmetric encryption.
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.
if($db->connected) if( $ret) migrate_paiements($db, $langs, $conf)
Records payment links for an invoice in a join table (link n<-->n for payments<-->invoices)
migrate_project_user_resp($db, $langs, $conf)
Migration du champ fk_user_resp de llx_projet vers llx_element_contact.
migrate_contracts_open($db, $langs, $conf)
Reouverture des contrats qui ont au moins une ligne non fermee.
migrate_shipping_delivery($db, $langs, $conf)
Migrate link stored into fk_expedition into llx_element_element.
migrate_delete_old_dir($db, $langs, $conf)
Remove deprecated directories.
migrate_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 du champ stock dans produits.
migrate_paiementfourn_facturefourn($db, $langs, $conf)
Factures fournisseurs.
migrate_contacts_socialnetworks()
Migrate contacts fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_customerorder_shipping($db, $langs, $conf)
Migrate order ref_customer and date_delivery fields to llx_expedition.
migrate_detail_livraison($db, $langs, $conf)
Migration des details commandes dans les details livraisons.
migrate_remise_except_entity($db, $langs, $conf)
Migrate to add entity value into llx_societe_remise_except.
migrate_paiements_orphelins_2($db, $langs, $conf)
Repair orphan payments (lost relations due to bugs) Query to check if there are still orphans: select...
migrate_price_contrat($db, $langs, $conf)
Update total of contract lines.
migrate_users_socialnetworks()
Migrate users fields facebook and co to socialnetworks.
migrate_user_photospath2()
Migrate file from old path users/99/file.jpg into users/99/photos/file.jpg.
migrate_contracts_det($db, $langs, $conf)
Mise a jour des contrats (gestion du contrat + detail de contrat)
migrate_price_facture($db, $langs, $conf)
Update total of invoice lines.
migrate_usergroup_rights_entity($db, $langs, $conf)
Migrate to add entity value into llx_usergroup_rights.
migrate_relationship_tables($db, $langs, $conf, $table, $fk_source, $sourcetype, $fk_target, $targettype)
Migration des tables de relation.
migrate_modeles($db, $langs, $conf)
Mise a jour des modeles selectionnes.
migrate_reset_blocked_log($db, $langs, $conf)
Migrate to reset the blocked log for V7+ algorithm.
migrate_mode_reglement($db, $langs, $conf)
Migrate link stored into fk_mode_reglement.
migrate_export_import_profiles($mode='export')
Migrate export and import profiles to fix field name that was renamed.
migrate_contracts_date2($db, $langs, $conf)
Update contracts with date min real if service date is lower.
migrate_commande_expedition($db, $langs, $conf)
Correspondence des expeditions et des commandes clients dans la table llx_co_exp.
migrate_actioncomm_element($db, $langs, $conf)
Migrate link stored into fk_xxxx into fk_element and elementtype.
migrate_blockedlog_add_hmac_key()
Add the HMAC key for blockedlog v2.
migrate_productlot_path()
Migrate file from old path to new one for lot path.
migrate_user_photospath()
Migrate file from old path to new one for users.
migrate_invoice_export_models()
Invoice exports been shifted (facture_1 => facture_0, facture_2 => facture_1) in version 20,...
migrate_thirdparties_socialnetworks()
Migrate thirdparties fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_event_assignement($db, $langs, $conf)
Migrate event assignment to owner.
migrate_clean_association($db, $langs, $conf)
Delete duplicates in table categorie_association.
migrate_commande_livraison($db, $langs, $conf)
Correspondence des livraisons et des commandes clients dans la table llx_co_liv.
migrate_event_assignement_contact($db, $langs, $conf)
Migrate event assignment to owner.
migrate_contracts_date1($db, $langs, $conf)
Mise a jour des date de contrats non renseignees.
migrate_remise_entity($db, $langs, $conf)
Migrate to add entity value into llx_societe_remise.
migrate_contractdet_rank()
Migrate Rank into contract line.
migrate_menus($db, $langs, $conf)
Migration of menus (use only 1 table instead of 3) 2.6 -> 2.7.
migrate_categorie_association($db, $langs, $conf)
Migrate categorie association.
migrate_delete_old_files($db, $langs, $conf)
Delete deprecated files.
migrate_price_commande_fournisseur($db, $langs, $conf)
Update total of purchase order lines.
migrate_element_time($db, $langs, $conf)
Migrate duration in seconds.
migrate_members_socialnetworks()
Migrate members fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_reload_menu($db, $langs, $conf)
Reload SQL menu file (if dynamic menus, if modified by version)
migrate_price_commande($db, $langs, $conf)
Update total of sales order lines.
migrate_shipping_delivery2($db, $langs, $conf)
We try to complete field ref_customer and date_delivery that are empty into llx_livraison.
migrate_apiresttokens()
Migrate API key in oauth_token table.