44define(
'ALLOWED_IF_UPGRADE_UNLOCK_FOUND', 1);
45include_once
'inc.php';
51if (!file_exists($conffile)) {
52 print
'Error: Dolibarr config file was not found. This may means that Dolibarr is not installed yet. Please call the page "/install/index.php" instead of "/install/upgrade.php").';
54require_once $conffile;
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';
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__);
134 if (substr($sapi_type, 0, 3) ==
'cli') {
135 print
'Syntax from command line: '.$script_file.
" x.y.z a.b.c [MAIN_MODULE_NAME1_TO_ENABLE,MAIN_MODULE_NAME2_TO_ENABLE...]\n";
136 print
'Example, upgrade from 19 to 20: '.$script_file.
" 19.0.0 20.0.0\n";
137 print
'Example, enable a module only: '.$script_file.
" 0.0.0 0.0.0 MAIN_MODULE_Adherent\n";
143pHeader(
'',
'step5',
GETPOST(
'action',
'aZ09') ?
GETPOST(
'action',
'aZ09') :
'upgrade',
'versionfrom='.$versionfrom.
'&versionto='.$versionto,
'',
'main-inside main-inside-borderbottom');
146if (!
GETPOST(
'action',
'aZ09') || preg_match(
'/upgrade/i',
GETPOST(
'action',
'aZ09'))) {
147 print
'<h3><img class="valignmiddle inline-block paddingright" src="../theme/common/octicons/build/svg/database.svg" width="20" alt="Database"> ';
148 print
'<span class="inline-block valignmiddle">'.$langs->trans(
'DataMigration').
'</span></h3>';
150 print
'<table class="centpercent">';
153 if ((!empty($dolibarr_main_db_pass) && preg_match(
'/(crypted|dolcrypt):/i', (
string) $dolibarr_main_db_pass)) || !empty($dolibarr_main_db_encrypted_pass)) {
154 require_once $dolibarr_main_document_root.
'/core/lib/security.lib.php';
155 if (!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) {
156 $dolibarr_main_db_pass = preg_replace(
'/crypted:/i',
'', (
string) $dolibarr_main_db_pass);
157 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
158 $dolibarr_main_db_pass =
dol_decode((
string) $dolibarr_main_db_pass);
159 } elseif (preg_match(
'/dolcrypt:/i', (
string) $dolibarr_main_db_pass)) {
160 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
161 $dolibarr_main_db_pass =
dolDecrypt((
string) $dolibarr_main_db_pass);
163 $dolibarr_main_db_pass =
dol_decode((
string) $dolibarr_main_db_encrypted_pass);
168 $conf->db->type = $dolibarr_main_db_type;
169 $conf->db->host = $dolibarr_main_db_host;
170 $conf->db->port = $dolibarr_main_db_port;
171 $conf->db->name = $dolibarr_main_db_name;
172 $conf->db->user = $dolibarr_main_db_user;
173 $conf->db->pass = $dolibarr_main_db_pass;
177 if (!$db->connected) {
178 print
'<tr><td colspan="4">'.$langs->trans(
"ErrorFailedToConnectToDatabase",
$conf->db->name).
'</td><td class="right">'.$langs->trans(
'Error').
'</td></tr>';
184 if ($db->database_selected) {
191 if (empty($dolibarr_main_db_encryption)) {
192 $dolibarr_main_db_encryption = 0;
194 $conf->db->dolibarr_main_db_encryption = $dolibarr_main_db_encryption;
195 if (empty($dolibarr_main_db_cryptkey)) {
196 $dolibarr_main_db_cryptkey =
'';
198 $conf->db->dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey;
201 $conf->setValues($db);
205 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
206 $conf->modules[
'syslog'] =
'syslog';
207 $conf->global->SYSLOG_LEVEL = constant(
'LOG_DEBUG');
208 if (!defined(
'SYSLOG_HANDLERS')) {
209 define(
'SYSLOG_HANDLERS',
'["mod_syslog_file"]');
211 if (!defined(
'SYSLOG_FILE')) {
212 if (@is_writable(
'/tmp')) {
213 define(
'SYSLOG_FILE',
'/tmp/dolibarr_install.log');
214 } elseif (!empty($_ENV[
"TMP"]) && @is_writable($_ENV[
"TMP"])) {
215 define(
'SYSLOG_FILE', $_ENV[
"TMP"].
'/dolibarr_install.log');
216 } elseif (!empty($_ENV[
"TEMP"]) && @is_writable($_ENV[
"TEMP"])) {
217 define(
'SYSLOG_FILE', $_ENV[
"TEMP"].
'/dolibarr_install.log');
218 } elseif (@is_writable(
'../../../../') && @file_exists(
'../../../../startdoliwamp.bat')) {
219 define(
'SYSLOG_FILE',
'../../../../dolibarr_install.log');
220 } elseif (@is_writable(
'../../')) {
221 define(
'SYSLOG_FILE',
'../../dolibarr_install.log');
225 if (defined(
'SYSLOG_FILE')) {
226 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
228 if (!defined(
'SYSLOG_FILE_NO_ERROR')) {
229 define(
'SYSLOG_FILE_NO_ERROR', 1);
232 $handlers = array(
'mod_syslog_file');
233 foreach ($handlers as $handler) {
234 $file = DOL_DOCUMENT_ROOT.
'/core/modules/syslog/'.$handler.
'.php';
235 if (!file_exists($file)) {
236 throw new Exception(
'Missing log handler file '.$handler.
'.php');
240 $loghandlerinstance =
new $handler();
241 if (!$loghandlerinstance instanceof
LogHandler) {
242 throw new Exception(
'Log handler does not extend LogHandler');
245 if (empty(
$conf->loghandlers[$handler])) {
246 $conf->loghandlers[$handler] = $loghandlerinstance;
251 $listofentities = array(1);
254 include_once DOL_DOCUMENT_ROOT.
'/core/class/hookmanager.class.php';
256 $hookmanager->initHooks(array(
'upgrade2'));
258 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto);
261 $reshook = $hookmanager->executeHooks(
'doUpgradeBefore', $parameters,
$object, $action);
262 if ($reshook >= 0 && is_array($hookmanager->resArray)) {
264 $listofentities = array_unique(array_merge($listofentities, $hookmanager->resArray));
275 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN birth date';
277 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemployment date';
279 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemploymentend date';
281 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_range integer';
283 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_c_exp_tax_cat integer';
285 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN langs varchar(24)';
287 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fieldcomputed text';
289 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fielddefault varchar(255)';
291 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
"extrafields ADD COLUMN enabled varchar(255) DEFAULT '1'";
293 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN help text';
295 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user_rights ADD COLUMN entity integer DEFAULT 1 NOT NULL';
301 foreach ($listofentities as $entity) {
302 dol_syslog(
"Process upgrade2 for entity ".$entity);
305 $conf->setEntityValues($db, $entity);
308 if (defined(
'SYSLOG_FILE')) {
309 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
312 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
314 $versiontoarray = array();
315 $versionranarray = array();
317 dol_syslog(
"Process upgrade2 d for entity ".$entity);
320 if (count($listofentities) > 1) {
321 print
'<tr><td colspan="4">*** '.$langs->trans(
"Entity").
' '.$entity.
'</td></tr>'.
"\n";
326 $dolibarrlastupgradeversionarray = preg_split(
'/[\.-]/', isset(
$conf->global->MAIN_VERSION_LAST_UPGRADE) ?
$conf->global->MAIN_VERSION_LAST_UPGRADE : (isset(
$conf->global->MAIN_VERSION_LAST_INSTALL) ?
$conf->global->MAIN_VERSION_LAST_INSTALL :
''));
332 $versiontoarray = explode(
'.', $versionto);
333 $versionranarray = explode(
'.', DOL_VERSION);
335 $afterversionarray = explode(
'.',
'2.0.0');
336 $beforeversionarray = explode(
'.',
'2.7.9');
338 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
399 $afterversionarray = explode(
'.',
'2.7.9');
400 $beforeversionarray = explode(
'.',
'2.8.9');
403 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
427 $afterversionarray = explode(
'.',
'2.8.9');
428 $beforeversionarray = explode(
'.',
'2.9.9');
430 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
442 $afterversionarray = explode(
'.',
'2.9.9');
443 $beforeversionarray = explode(
'.',
'3.0.9');
449 $afterversionarray = explode(
'.',
'3.0.9');
450 $beforeversionarray = explode(
'.',
'3.1.9');
452 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
460 $afterversionarray = explode(
'.',
'3.1.9');
461 $beforeversionarray = explode(
'.',
'3.2.9');
463 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
473 $afterversionarray = explode(
'.',
'3.2.9');
474 $beforeversionarray = explode(
'.',
'3.3.9');
476 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
485 $afterversionarray = explode(
'.',
'3.6.9');
486 $beforeversionarray = explode(
'.',
'3.7.9');
488 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
494 $afterversionarray = explode(
'.',
'3.7.9');
495 $beforeversionarray = explode(
'.',
'3.8.9');
501 $afterversionarray = explode(
'.',
'3.9.9');
502 $beforeversionarray = explode(
'.',
'4.0.9');
504 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
510 $afterversionarray = explode(
'.',
'4.0.9');
511 $beforeversionarray = explode(
'.',
'5.0.9');
513 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
523 $afterversionarray = explode(
'.',
'5.0.9');
524 $beforeversionarray = explode(
'.',
'6.0.9');
526 if (isModEnabled(
'multicompany')) {
527 global $multicompany_transverse_mode;
530 if (empty($multicompany_transverse_mode)) {
531 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
543 $afterversionarray = explode(
'.',
'6.0.9');
544 $beforeversionarray = explode(
'.',
'7.0.9');
546 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
555 $afterversionarray = explode(
'.',
'7.0.9');
556 $beforeversionarray = explode(
'.',
'8.0.9');
558 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
564 $afterversionarray = explode(
'.',
'8.0.9');
565 $beforeversionarray = explode(
'.',
'9.0.9');
571 $afterversionarray = explode(
'.',
'10.0.9');
572 $beforeversionarray = explode(
'.',
'11.0.9');
574 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
583 $afterversionarray = explode(
'.',
'13.0.9');
584 $beforeversionarray = explode(
'.',
'14.0.9');
586 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
593 $afterversionarray = explode(
'.',
'15.0.9');
594 $beforeversionarray = explode(
'.',
'16.0.9');
596 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
603 $afterversionarray = explode(
'.',
'16.0.9');
604 $beforeversionarray = explode(
'.',
'17.0.9');
606 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
612 $afterversionarray = explode(
'.',
'17.0.9');
613 $beforeversionarray = explode(
'.',
'18.0.9');
615 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
629 $afterversionarray = explode(
'.',
'19.0.9');
630 $beforeversionarray = explode(
'.',
'20.0.9');
632 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
638 $afterversionarray = explode(
'.',
'20.0.9');
639 $beforeversionarray = explode(
'.',
'21.0.9');
643 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
649 $afterversionarray = explode(
'.',
'21.0.9');
650 $beforeversionarray = explode(
'.',
'22.0.9');
652 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
660 dol_syslog(
"Run migrate_... if migration is LAST ONE");
663 $listofmodule = array(
664 'MAIN_MODULE_ACCOUNTING' =>
'newboxdefonly',
665 'MAIN_MODULE_AGENDA' =>
'newboxdefonly',
666 'MAIN_MODULE_BOM' =>
'menuonly',
667 'MAIN_MODULE_BANQUE' =>
'menuonly',
668 'MAIN_MODULE_BARCODE' =>
'newboxdefonly',
669 'MAIN_MODULE_CRON' =>
'newboxdefonly',
670 'MAIN_MODULE_COMMANDE' =>
'newboxdefonly',
671 'MAIN_MODULE_BLOCKEDLOG' =>
'noboxes',
672 'MAIN_MODULE_DEPLACEMENT' =>
'newboxdefonly',
673 'MAIN_MODULE_DON' =>
'newboxdefonly',
674 'MAIN_MODULE_ECM' =>
'newboxdefonly',
675 'MAIN_MODULE_EXTERNALSITE' =>
'newboxdefonly',
676 'MAIN_MODULE_EXPENSEREPORT' =>
'newboxdefonly',
677 'MAIN_MODULE_FACTURE' =>
'newboxdefonly',
678 'MAIN_MODULE_FOURNISSEUR' =>
'newboxdefonly',
679 'MAIN_MODULE_FICHEINTER' =>
'newboxdefonly',
680 'MAIN_MODULE_HOLIDAY' =>
'newboxdefonly',
681 'MAIN_MODULE_LOAN' =>
'newboxdefonly',
682 'MAIN_MODULE_MARGIN' =>
'menuonly',
683 'MAIN_MODULE_MRP' =>
'menuonly',
684 'MAIN_MODULE_OPENSURVEY' =>
'newboxdefonly',
685 'MAIN_MODULE_PAYBOX' =>
'newboxdefonly',
686 'MAIN_MODULE_PRINTING' =>
'newboxdefonly',
687 'MAIN_MODULE_PRODUIT' =>
'newboxdefonly',
688 'MAIN_MODULE_RECRUITMENT' =>
'menuonly',
689 'MAIN_MODULE_RESOURCE' =>
'noboxes',
690 'MAIN_MODULE_SALARIES' =>
'newboxdefonly',
691 'MAIN_MODULE_SERVICE' =>
'newboxdefonly',
692 'MAIN_MODULE_SYSLOG' =>
'newboxdefonly',
693 'MAIN_MODULE_SOCIETE' =>
'newboxdefonly',
694 'MAIN_MODULE_STRIPE' =>
'menuonly',
695 'MAIN_MODULE_TICKET' =>
'newboxdefonly',
696 'MAIN_MODULE_TAKEPOS' =>
'newboxdefonly',
697 'MAIN_MODULE_USER' =>
'newboxdefonly',
698 'MAIN_MODULE_VARIANTS' =>
'newboxdefonly',
699 'MAIN_MODULE_WEBSITE' =>
'newboxdefonly',
716 if (!$error && $enablemodules) {
718 $listofmodules = array();
719 $enablemodules = preg_replace(
'/enablemodules=/',
'', $enablemodules);
720 $tmplistofmodules = explode(
',', $enablemodules);
721 foreach ($tmplistofmodules as $value) {
722 $listofmodules[$value] =
'forceactivate';
726 if ($resultreloadmodules < 0) {
734 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' =>
$conf);
737 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterDB', $parameters,
$object, $action);
738 if ($hookmanager->resNbOfHooks > 0) {
740 print
'<tr><td colspan="4">';
741 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
742 print $hookmanager->error;
743 print
"<!-- (".$reshook.
") -->";
746 print
'<tr class="trforrunsql"><td colspan="4">';
747 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (DB)</b>: <span class="ok">OK</span>';
748 print
"<!-- (".$reshook.
") -->";
753 if (!empty(
$conf->modules_parts[
'hooks'])) {
754 print
'<tr class="trforrunsql"><td colspan="4">';
755 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterDB");
766 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"const SET VALUE = 'torefresh' WHERE name = 'MAIN_FIRST_PING_OK_ID'";
781 foreach ($listofentities as $entity) {
783 $conf->setEntityValues($db, $entity);
785 if (defined(
'SYSLOG_FILE')) {
786 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
788 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
792 $srcroot = DOL_DOCUMENT_ROOT.
'/install/medias';
793 $destroot = DOL_DATA_ROOT.
'/medias';
806 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' =>
$conf);
809 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterFiles', $parameters,
$object, $action);
810 if ($hookmanager->resNbOfHooks > 0) {
812 print
'<tr><td colspan="4">';
813 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
814 print $hookmanager->error;
815 print
"<!-- (".$reshook.
") -->";
818 print
'<tr class="trforrunsql"><td colspan="4">';
819 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (Files)</b>: <span class="ok">OK</span>';
820 print
"<!-- (".$reshook.
") -->";
825 if (!empty(
$conf->modules_parts[
'hooks'])) {
826 print
'<tr class="trforrunsql"><td colspan="4">';
827 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterFiles");
837 print
'<table width="100%">';
838 print
'<tr><td style="width: 30%">'.$langs->trans(
"MigrationFinished").
'</td>';
839 print
'<td class="right">';
843 print
'<span class="error">'.$langs->trans(
"Error").
'</span> - ';
847 print
'<script type="text/javascript">
848 jQuery(document).ready(function() {
849 function init_trrunsql()
851 console.log("toggle .trforrunsql");
852 jQuery(".trforrunsql").toggle();
855 jQuery(".trforrunsqlshowhide").click(function() {
860 print
'<a class="trforrunsqlshowhide" href="#">'.$langs->trans(
"ShowHideDetails").
'</a>';
863 print
'</td></tr>'.
"\n";
869 print
'<div class="error">'.$langs->trans(
'ErrorWrongParameters').
'</div>';
874if ($error && isset($argv[1])) {
880pFooter($error ? 2 : 0, $setuplang);
903 print
'<tr><td colspan="4">';
906 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
908 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
909 $obj = $db->fetch_object($result);
911 $sql =
"SELECT p.rowid, p.fk_facture, p.amount";
912 $sql .=
" FROM ".MAIN_DB_PREFIX.
"paiement as p";
913 $sql .=
" WHERE p.fk_facture > 0";
915 $resql = $db->query($sql);
922 $num = $db->num_rows($resql);
925 $obj = $db->fetch_object($resql);
926 $row[$i][0] = $obj->rowid;
927 $row[$i][1] = $obj->fk_facture;
928 $row[$i][2] = $obj->amount;
936 print $langs->trans(
'MigrationPaymentsNumberToUpdate', $num).
"<br>\n";
940 for ($i = 0; $i < $num; $i++) {
941 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
942 $sql .=
" VALUES (".((int) $row[$i][1]).
",".((int) $row[$i][0]).
",".((float) $row[$i][2]).
")";
944 $res += $db->query($sql);
946 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET fk_facture = 0 WHERE rowid = ".((int) $row[$i][0]);
948 $res += $db->query($sql);
950 print $langs->trans(
'MigrationProcessPaymentUpdate', $row[$i][0]).
"<br>\n";
954 if (is_array($row) && $res == (2 * count($row))) {
956 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
959 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
962 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
965 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
983 print
'<tr><td colspan="4">';
986 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
988 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
989 $obj = $db->fetch_object($result);
992 $sql =
"SELECT DISTINCT p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
993 $sql .=
" bu2.url_id as socid";
994 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
995 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
996 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')";
997 $sql .=
" WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid";
998 $sql .=
" AND b.rappro = 1";
999 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1001 $resql = $db->query($sql);
1007 $num = $db->num_rows($resql);
1010 $obj = $db->fetch_object($resql);
1011 if ($obj->pamount == $obj->bamount && $obj->socid) {
1012 $row[$j][
'paymentid'] = $obj->rowid;
1013 $row[$j][
'pamount'] = $obj->pamount;
1014 $row[$j][
'fk_bank'] = $obj->fk_bank;
1015 $row[$j][
'bamount'] = $obj->bamount;
1016 $row[$j][
'socid'] = $obj->socid;
1017 $row[$j][
'datec'] = $obj->datec;
1027 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 1).
': '.count($row).
"<br>\n";
1032 for ($i = 0; $i < $num; $i++) {
1034 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>';
1038 $sql =
" SELECT DISTINCT f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1039 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1040 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1041 $sql .=
" AND pf.fk_facture IS NULL";
1042 $sql .=
" ORDER BY f.fk_statut";
1044 $resql = $db->query($sql);
1046 $num = $db->num_rows($resql);
1049 $obj = $db->fetch_object($resql);
1050 $facid = $obj->rowid;
1052 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1053 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1055 $res += $db->query($sql);
1057 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1065 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1067 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1072 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1075 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1093 print
'<tr><td colspan="4">';
1096 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
1098 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
1099 $obj = $db->fetch_object($result);
1102 $sql =
"SELECT DISTINCT p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1103 $sql .=
" bu2.url_id as socid";
1104 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1105 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1106 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')";
1107 $sql .=
" WHERE pf.rowid IS NULL AND (p.fk_bank = bu.fk_bank AND bu.type = 'payment') AND bu.fk_bank = b.rowid";
1108 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1110 $resql = $db->query($sql);
1116 $num = $db->num_rows($resql);
1119 $obj = $db->fetch_object($resql);
1120 if ($obj->pamount == $obj->bamount && $obj->socid) {
1121 $row[$j][
'paymentid'] = $obj->rowid;
1122 $row[$j][
'pamount'] = $obj->pamount;
1123 $row[$j][
'fk_bank'] = $obj->fk_bank;
1124 $row[$j][
'bamount'] = $obj->bamount;
1125 $row[$j][
'socid'] = $obj->socid;
1126 $row[$j][
'datec'] = $obj->datec;
1139 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 2).
': '.count($row).
"<br>\n";
1143 for ($i = 0; $i < $num; $i++) {
1145 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>';
1149 $sql =
" SELECT DISTINCT f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1150 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1151 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1152 $sql .=
" AND pf.fk_facture IS NULL";
1153 $sql .=
" ORDER BY f.fk_statut";
1155 $resql = $db->query($sql);
1157 $num = $db->num_rows($resql);
1160 $obj = $db->fetch_object($resql);
1161 $facid = $obj->rowid;
1163 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1164 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1166 $res += $db->query($sql);
1168 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1177 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1179 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1184 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1190 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiement DROP COLUMN fk_facture";
1200 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1217 print
'<tr><td colspan="4">';
1222 print
'<b>'.$langs->trans(
'MigrationContractsUpdate').
"</b><br>\n";
1224 $sql =
"SELECT c.rowid as cref, c.date_contrat, c.statut, c.fk_product, c.fk_facture, c.fk_user_author,";
1225 $sql .=
" p.ref, p.label, p.description, p.price, p.tva_tx, p.duration, cd.rowid";
1226 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c";
1227 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p";
1228 $sql .=
" ON c.fk_product = p.rowid";
1229 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"contratdet as cd";
1230 $sql .=
" ON c.rowid=cd.fk_contrat";
1231 $sql .=
" WHERE cd.rowid IS NULL AND p.rowid IS NOT NULL";
1232 $resql = $db->query($sql);
1238 $num = $db->num_rows($resql);
1241 print $langs->trans(
'MigrationContractsNumberToUpdate', $num).
"<br>\n";
1245 $obj = $db->fetch_object($resql);
1247 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"contratdet (";
1248 $sql .=
"fk_contrat, fk_product, statut, label, description,";
1249 $sql .=
"date_ouverture_prevue, date_ouverture, date_fin_validite, tva_tx, qty,";
1250 $sql .=
"subprice, price_ht, fk_user_author, fk_user_ouverture)";
1251 $sql .=
" VALUES (";
1252 $sql .= ((int) $obj->cref).
", ".($obj->fk_product ? ((int) $obj->fk_product) : 0).
", ";
1254 $sql .=
"'".$db->escape($obj->label).
"', null, ";
1255 $sql .= ($obj->date_contrat ?
"'".$db->idate($db->jdate($obj->date_contrat)).
"'" :
"null").
", ";
1258 $sql .= ((float) $obj->tva_tx).
", 1, ";
1259 $sql .= ((float) $obj->price).
", ".((float) $obj->price).
", ".((int) $obj->fk_user_author).
",";
1263 if ($db->query($sql)) {
1264 print $langs->trans(
'MigrationContractsLineCreation', $obj->cref).
"<br>\n";
1276 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1279 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1282 print $langs->trans(
'MigrationContractsNothingToUpdate').
"<br>\n";
1285 print $langs->trans(
'MigrationContractsFieldDontExist').
"<br>\n";
1302 print
'<tr><td colspan="4">';
1307 print
'<b>'.$langs->trans(
'MigrationBankTransfertsUpdate').
"</b><br>\n";
1309 $sql =
"SELECT ba.rowid as barowid, bb.rowid as bbrowid";
1310 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as bb, ".MAIN_DB_PREFIX.
"bank as ba";
1311 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu ON bu.fk_bank = ba.rowid";
1312 $sql .=
" WHERE ba.amount = -bb.amount AND ba.fk_account <> bb.fk_account";
1313 $sql .=
" AND ba.datev = bb.datev AND ba.datec = bb.datec";
1314 $sql .=
" AND bu.fk_bank IS NULL";
1315 $resql = $db->query($sql);
1321 $num = $db->num_rows($resql);
1324 print $langs->trans(
'MigrationBankTransfertsToUpdate', $num).
"<br>\n";
1328 $obj = $db->fetch_object($resql);
1330 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"bank_url (";
1331 $sql .=
"fk_bank, url_id, url, label, type";
1333 $sql .=
" VALUES (";
1334 $sql .= $obj->barowid.
",".$obj->bbrowid.
", '/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'";
1340 if (!$db->query($sql)) {
1351 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1354 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1357 print $langs->trans(
'MigrationBankTransfertsNothingToUpdate').
"<br>\n";
1376 print
'<tr><td colspan="4">';
1379 print
'<b>'.$langs->trans(
'MigrationContractsEmptyDatesUpdate').
"</b><br>\n";
1381 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set date_contrat=tms where date_contrat is null";
1383 $resql = $db->query($sql);
1387 if ($db->affected_rows($resql) > 0) {
1388 print $langs->trans(
'MigrationContractsEmptyDatesUpdateSuccess').
"<br>\n";
1390 print $langs->trans(
'MigrationContractsEmptyDatesNothingToUpdate').
"<br>\n";
1393 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=tms where datec is null";
1395 $resql = $db->query($sql);
1399 if ($db->affected_rows($resql) > 0) {
1400 print $langs->trans(
'MigrationContractsEmptyCreationDatesUpdateSuccess').
"<br>\n";
1402 print $langs->trans(
'MigrationContractsEmptyCreationDatesNothingToUpdate').
"<br>\n";
1418 print
'<tr><td colspan="4">';
1423 print
'<b>'.$langs->trans(
'MigrationContractsInvalidDatesUpdate').
"</b><br>\n";
1425 $sql =
"SELECT c.rowid as cref, c.datec, c.date_contrat, MIN(cd.date_ouverture) as datemin";
1426 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c,";
1427 $sql .=
" ".MAIN_DB_PREFIX.
"contratdet as cd";
1428 $sql .=
" WHERE c.rowid=cd.fk_contrat AND cd.date_ouverture IS NOT NULL";
1429 $sql .=
" GROUP BY c.rowid, c.date_contrat";
1430 $resql = $db->query($sql);
1436 $num = $db->num_rows($resql);
1439 $nbcontratsmodifie = 0;
1443 $obj = $db->fetch_object($resql);
1444 if ($obj->date_contrat > $obj->datemin) {
1445 $datemin = $db->jdate($obj->datemin);
1447 print $langs->trans(
'MigrationContractsInvalidDateFix', $obj->cref, $obj->date_contrat, $obj->datemin).
"<br>\n";
1448 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1449 $sql .=
" SET date_contrat='".$db->idate($datemin).
"'";
1450 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1451 $resql2 = $db->query($sql);
1456 $nbcontratsmodifie++;
1463 if ($nbcontratsmodifie) {
1464 print $langs->trans(
'MigrationContractsInvalidDatesNumber', $nbcontratsmodifie).
"<br>\n";
1466 print $langs->trans(
'MigrationContractsInvalidDatesNothingToUpdate').
"<br>\n";
1486 print
'<tr><td colspan="4">';
1489 print
'<b>'.$langs->trans(
'MigrationContractsIncoherentCreationDateUpdate').
"</b><br>\n";
1491 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=date_contrat where datec is null or datec > date_contrat";
1493 $resql = $db->query($sql);
1497 if ($db->affected_rows($resql) > 0) {
1498 print $langs->trans(
'MigrationContractsIncoherentCreationDateUpdateSuccess').
"<br>\n";
1500 print $langs->trans(
'MigrationContractsIncoherentCreationDateNothingToUpdate').
"<br>\n";
1516 print
'<tr><td colspan="4">';
1519 print
'<b>'.$langs->trans(
'MigrationReopeningContracts').
"</b><br>\n";
1521 $sql =
"SELECT c.rowid as cref FROM ".MAIN_DB_PREFIX.
"contrat as c, ".MAIN_DB_PREFIX.
"contratdet as cd";
1522 $sql .=
" WHERE cd.statut = 4 AND c.statut=2 AND c.rowid=cd.fk_contrat";
1524 $resql = $db->query($sql);
1528 if ($db->affected_rows($resql) > 0) {
1531 $num = $db->num_rows($resql);
1534 $nbcontratsmodifie = 0;
1538 $obj = $db->fetch_object($resql);
1540 print $langs->trans(
'MigrationReopenThisContract', $obj->cref).
"<br>\n";
1541 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1542 $sql .=
" SET statut = 1";
1543 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1544 $resql2 = $db->query($sql);
1549 $nbcontratsmodifie++;
1556 if ($nbcontratsmodifie) {
1557 print $langs->trans(
'MigrationReopenedContractsNumber', $nbcontratsmodifie).
"<br>\n";
1559 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1563 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1581 print
'<tr><td colspan="4">';
1583 print
'<b>'.$langs->trans(
'SuppliersInvoices').
"</b><br>\n";
1586 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiementfourn",
"fk_facture_fourn");
1587 $obj = $db->fetch_object($result);
1592 $select_sql =
'SELECT rowid, fk_facture_fourn, amount';
1593 $select_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn';
1594 $select_sql .=
' WHERE fk_facture_fourn IS NOT NULL';
1597 $select_resql = $db->query($select_sql);
1598 if ($select_resql) {
1599 $select_num = $db->num_rows($select_resql);
1603 while (($i < $select_num) && (!$error)) {
1604 $select_obj = $db->fetch_object($select_resql);
1607 $check_sql =
'SELECT fk_paiementfourn, fk_facturefourn';
1608 $check_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn';
1609 $check_sql .=
' WHERE fk_paiementfourn = '.((int) $select_obj->rowid).
' AND fk_facturefourn = '.((int) $select_obj->fk_facture_fourn);
1610 $check_resql = $db->query($check_sql);
1612 $check_num = $db->num_rows($check_resql);
1613 if ($check_num == 0) {
1617 print
'<tr><td colspan="4" class="nowrap"><b>'.$langs->trans(
'SuppliersInvoices').
'</b></td></tr>';
1618 print
'<tr><td>fk_paiementfourn</td><td>fk_facturefourn</td><td>'.$langs->trans(
'Amount').
'</td><td> </td></tr>';
1621 print
'<tr class="oddeven">';
1622 print
'<td>'.$select_obj->rowid.
'</td><td>'.$select_obj->fk_facture_fourn.
'</td><td>'.$select_obj->amount.
'</td>';
1624 $insert_sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn SET ';
1625 $insert_sql .=
' fk_paiementfourn = \''.$select_obj->rowid.
'\',
';
1626 $insert_sql .= ' fk_facturefourn = \
''.$select_obj->fk_facture_fourn.
'\',
';
1627 $insert_sql .= ' amount = \
''.$select_obj->amount.
'\'';
1628 $insert_resql = $db->query($insert_sql);
1630 if ($insert_resql) {
1632 print
'<td><span class="ok">'.$langs->trans(
"OK").
'</span></td>';
1634 print
'<td><span class="error">Error on insert</span></td>';
1650 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1654 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiementfourn DROP COLUMN fk_facture_fourn";
1657 print
'<tr><td>'.$langs->trans(
"Error").
'</td></tr>';
1661 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1678 $tmpmysoc->setMysoc(
$conf);
1682 print
'<tr><td colspan="4">';
1685 print
'<b>'.$langs->trans(
'MigrationInvoice').
"</b><br>\n";
1688 $sql =
"SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as vatrate, fd.total_ttc, fd.info_bits,";
1689 $sql .=
" f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f";
1690 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facturedet as fd, ".MAIN_DB_PREFIX.
"facture as f";
1691 $sql .=
" WHERE fd.fk_facture = f.rowid";
1692 $sql .=
" AND (((fd.total_ttc = 0 AND fd.remise_percent != 100) or fd.total_ttc IS NULL) or f.total_ttc IS NULL)";
1696 $resql = $db->query($sql);
1698 $num = $db->num_rows($resql);
1702 $obj = $db->fetch_object($resql);
1704 $rowid = $obj->rowid;
1706 $pu = $obj->subprice;
1707 $vatrate = $obj->vatrate;
1708 $remise_percent = $obj->remise_percent;
1709 $remise_percent_global = $obj->remise_percent_global;
1710 $total_ttc_f = $obj->total_ttc_f;
1711 $info_bits = $obj->info_bits;
1715 $facligne->fetch($rowid);
1717 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $facligne->product_type, $tmpmysoc);
1718 $total_ht = $result[0];
1719 $total_tva = $result[1];
1720 $total_ttc = $result[2];
1722 $facligne->total_ht = (float) $total_ht;
1723 $facligne->total_tva = (float) $total_tva;
1724 $facligne->total_ttc = (float) $total_ttc;
1726 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);
1728 $facligne->update_total();
1732 if (!$total_ttc_f) {
1734 $facture->id = $obj->facid;
1736 if ($facture->fetch($facture->id) >= 0) {
1737 if ($facture->update_price() > 0) {
1740 print
"Error id=".$facture->id;
1753 print $langs->trans(
"AlreadyDone");
1759 print
"Error #1 ".$db->error();
1781 $tmpmysoc->setMysoc(
$conf);
1785 print
'<tr><td colspan="4">';
1788 print
'<b>'.$langs->trans(
'MigrationProposal').
"</b><br>\n";
1791 $sql =
"SELECT pd.rowid, pd.qty, pd.subprice, pd.remise_percent, pd.tva_tx as vatrate, pd.info_bits,";
1792 $sql .=
" p.rowid as propalid, p.remise_percent as remise_percent_global";
1793 $sql .=
" FROM ".MAIN_DB_PREFIX.
"propaldet as pd, ".MAIN_DB_PREFIX.
"propal as p";
1794 $sql .=
" WHERE pd.fk_propal = p.rowid";
1795 $sql .=
" AND ((pd.total_ttc = 0 AND pd.remise_percent != 100) or pd.total_ttc IS NULL)";
1798 $resql = $db->query($sql);
1800 $num = $db->num_rows($resql);
1804 $obj = $db->fetch_object($resql);
1806 $rowid = $obj->rowid;
1808 $pu = $obj->subprice;
1809 $vatrate = $obj->vatrate;
1810 $remise_percent = $obj->remise_percent;
1811 $remise_percent_global = $obj->remise_percent_global;
1812 $info_bits = $obj->info_bits;
1816 $propalligne->fetch($rowid);
1818 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $propalligne->product_type, $tmpmysoc);
1819 $total_ht = $result[0];
1820 $total_tva = $result[1];
1821 $total_ttc = $result[2];
1823 $propalligne->total_ht = (float) $total_ht;
1824 $propalligne->total_tva = (float) $total_tva;
1825 $propalligne->total_ttc = (float) $total_ttc;
1827 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);
1829 $propalligne->update_total();
1834 print $langs->trans(
"AlreadyDone");
1841 print
"Error #1 ".$db->error();
1864 $tmpmysoc->setMysoc(
$conf);
1865 if (empty($tmpmysoc->country_id)) {
1866 $tmpmysoc->country_id = 0;
1869 print
'<tr><td colspan="4">';
1872 print
'<b>'.$langs->trans(
'MigrationContract').
"</b><br>\n";
1875 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1876 $sql .=
" c.rowid as contratid";
1877 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd, ".MAIN_DB_PREFIX.
"contrat as c";
1878 $sql .=
" WHERE cd.fk_contrat = c.rowid";
1879 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100 AND cd.subprice > 0) or cd.total_ttc IS NULL)";
1882 $resql = $db->query($sql);
1884 $num = $db->num_rows($resql);
1888 $obj = $db->fetch_object($resql);
1890 $rowid = $obj->rowid;
1892 $pu = $obj->subprice;
1893 $vatrate = $obj->vatrate;
1894 $remise_percent = $obj->remise_percent;
1895 $info_bits = $obj->info_bits;
1900 $contratligne->fetch($rowid);
1902 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, 0,
'HT', $info_bits, $contratligne->product_type, $tmpmysoc);
1903 $total_ht = $result[0];
1904 $total_tva = $result[1];
1905 $total_ttc = $result[2];
1907 $contratligne->total_ht = (float) $total_ht;
1908 $contratligne->total_tva = (float) $total_tva;
1909 $contratligne->total_ttc = (float) $total_ttc;
1911 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);
1913 $contratligne->update_total();
1918 print $langs->trans(
"AlreadyDone");
1925 print
"Error #1 ".$db->error();
1948 $tmpmysoc->setMysoc(
$conf);
1950 print
'<tr><td colspan="4">';
1953 print
'<b>'.$langs->trans(
'MigrationOrder').
"</b><br>\n";
1956 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1957 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1958 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"commande as c";
1959 $sql .=
" WHERE cd.fk_commande = c.rowid";
1960 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1963 $resql = $db->query($sql);
1965 $num = $db->num_rows($resql);
1969 $obj = $db->fetch_object($resql);
1971 $rowid = $obj->rowid;
1973 $pu = $obj->subprice;
1974 $vatrate = $obj->vatrate;
1975 $remise_percent = $obj->remise_percent;
1976 $remise_percent_global = $obj->remise_percent_global;
1977 $info_bits = $obj->info_bits;
1981 $commandeligne->fetch($rowid);
1983 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $tmpmysoc);
1984 $total_ht = $result[0];
1985 $total_tva = $result[1];
1986 $total_ttc = $result[2];
1988 $commandeligne->total_ht = (float) $total_ht;
1989 $commandeligne->total_tva = (float) $total_tva;
1990 $commandeligne->total_ttc = (float) $total_ttc;
1992 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);
1994 $commandeligne->update_total();
1999 print $langs->trans(
"AlreadyDone");
2016 print
"Error #1 ".$db->error();
2041 $tmpmysoc->setMysoc(
$conf);
2043 print
'<tr><td colspan="4">';
2046 print
'<b>'.$langs->trans(
'MigrationSupplierOrder').
"</b><br>\n";
2049 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
2050 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
2051 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cd, ".MAIN_DB_PREFIX.
"commande_fournisseur as c";
2052 $sql .=
" WHERE cd.fk_commande = c.rowid";
2053 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
2056 $resql = $db->query($sql);
2058 $num = $db->num_rows($resql);
2062 $obj = $db->fetch_object($resql);
2064 $rowid = $obj->rowid;
2066 $pu = $obj->subprice;
2067 $vatrate = $obj->vatrate;
2068 $remise_percent = $obj->remise_percent;
2069 $remise_percent_global = $obj->remise_percent_global;
2070 $info_bits = $obj->info_bits;
2074 $commandeligne->fetch($rowid);
2076 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $mysoc);
2077 $total_ht = $result[0];
2078 $total_tva = $result[1];
2079 $total_ttc = $result[2];
2081 $commandeligne->total_ht = (float) $total_ht;
2082 $commandeligne->total_tva = (float) $total_tva;
2083 $commandeligne->total_ttc = (float) $total_ttc;
2085 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);
2087 $commandeligne->update_total();
2092 print $langs->trans(
"AlreadyDone");
2109 print
"Error #1 ".$db->error();
2134 if (isModEnabled(
'invoice')) {
2135 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
2137 if (count($modellist) == 0) {
2139 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('crabe','invoice')";
2140 $resql = $db->query($sql);
2147 if (isModEnabled(
'order')) {
2148 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
2150 if (count($modellist) == 0) {
2152 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('einstein','order')";
2153 $resql = $db->query($sql);
2160 if (isModEnabled(
"shipping")) {
2161 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
2163 if (count($modellist) == 0) {
2165 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('rouget','shipping')";
2166 $resql = $db->query($sql);
2189 print
'<tr><td colspan="4">';
2192 print
'<b>'.$langs->trans(
'MigrationShipmentOrderMatching').
"</b><br>\n";
2194 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"fk_commande");
2195 $obj = $db->fetch_object($result);
2201 $sql =
"SELECT e.rowid, e.fk_commande FROM ".MAIN_DB_PREFIX.
"expedition as e";
2202 $resql = $db->query($sql);
2205 $num = $db->num_rows($resql);
2209 $obj = $db->fetch_object($resql);
2211 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_exp (fk_expedition,fk_commande)";
2212 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2213 $resql2 = $db->query($sql);
2226 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition DROP COLUMN fk_commande";
2227 print $langs->trans(
'FieldRenamed').
"<br>\n";
2237 print $langs->trans(
'AlreadyDone').
"<br>\n";
2254 print
'<tr><td colspan="4">';
2257 print
'<b>'.$langs->trans(
'MigrationDeliveryOrderMatching').
"</b><br>\n";
2259 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_commande");
2260 $obj = $db->fetch_object($result);
2266 $sql =
"SELECT l.rowid, l.fk_commande,";
2267 $sql .=
" c.ref_client, c.date_livraison as delivery_date";
2268 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l, ".MAIN_DB_PREFIX.
"commande as c";
2269 $sql .=
" WHERE c.rowid = l.fk_commande";
2270 $resql = $db->query($sql);
2273 $num = $db->num_rows($resql);
2277 $obj = $db->fetch_object($resql);
2279 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_liv (fk_livraison,fk_commande)";
2280 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2281 $resql2 = $db->query($sql);
2284 $delivery_date = $db->jdate($obj->delivery_date);
2286 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2287 $sqlu .=
" ref_client = '".$db->escape($obj->ref_client).
"'";
2288 $sqlu .=
", date_livraison = '".$db->idate($delivery_date).
"'";
2289 $sqlu .=
" WHERE rowid = ".((int) $obj->rowid);
2290 $resql3 = $db->query($sqlu);
2306 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_commande";
2307 print $langs->trans(
'FieldRenamed').
"<br>\n";
2317 print $langs->trans(
'AlreadyDone').
"<br>\n";
2334 print
'<tr><td colspan="4">';
2337 print
'<b>'.$langs->trans(
'MigrationDeliveryDetail').
"</b><br>\n";
2341 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_commande_ligne");
2342 $obj = $db->fetch_object($result);
2348 $sql =
"SELECT cd.rowid, cd.fk_product, cd.description, cd.subprice, cd.total_ht";
2349 $sql .=
", ld.fk_livraison";
2350 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"livraisondet as ld";
2351 $sql .=
" WHERE ld.fk_commande_ligne = cd.rowid";
2352 $resql = $db->query($sql);
2355 $num = $db->num_rows($resql);
2359 $obj = $db->fetch_object($resql);
2361 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"livraisondet SET";
2362 $sql .=
" fk_product = ".((int) $obj->fk_product);
2363 $sql .=
",description = '".$db->escape($obj->description).
"'";
2364 $sql .=
",subprice = ".price2num($obj->subprice);
2365 $sql .=
",total_ht = ".price2num($obj->total_ht);
2366 $sql .=
" WHERE fk_commande_ligne = ".((int) $obj->rowid);
2367 $resql2 = $db->query($sql);
2370 $sql =
"SELECT total_ht";
2371 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
2372 $sql .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2373 $resql3 = $db->query($sql);
2376 $obju = $db->fetch_object($resql3);
2377 $total_ht = $obju->total_ht + $obj->total_ht;
2379 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2380 $sqlu .=
" total_ht = ".price2num($total_ht,
'MT');
2381 $sqlu .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2382 $resql4 = $db->query($sqlu);
2402 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet CHANGE fk_commande_ligne fk_origin_line integer";
2403 print $langs->trans(
'FieldRenamed').
"<br>\n";
2413 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_origin_line");
2414 $obj = $db->fetch_object($result);
2416 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet ADD COLUMN fk_origin_line integer after fk_livraison";
2419 print $langs->trans(
'AlreadyDone').
"<br>\n";
2436 print
'<tr><td colspan="4">';
2439 print
'<b>'.$langs->trans(
'MigrationStockDetail').
"</b><br>\n";
2445 $sql =
"SELECT SUM(reel) as total, fk_product";
2446 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_stock as ps";
2447 $sql .=
" GROUP BY fk_product";
2448 $resql = $db->query($sql);
2451 $num = $db->num_rows($resql);
2455 $obj = $db->fetch_object($resql);
2457 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET";
2458 $sql .=
" stock = ".price2num($obj->total,
'MS');
2459 $sql .=
" WHERE rowid = ".((int) $obj->fk_product);
2461 $resql2 = $db->query($sql);
2498 print
'<tr><td colspan="4">';
2501 print
'<b>'.$langs->trans(
'MigrationMenusDetail').
"</b><br>\n";
2505 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"menu_constraint")) {
2508 $sql =
"SELECT m.rowid, mc.action";
2509 $sql .=
" FROM ".MAIN_DB_PREFIX.
"menu_constraint as mc, ".MAIN_DB_PREFIX.
"menu_const as md, ".MAIN_DB_PREFIX.
"menu as m";
2510 $sql .=
" WHERE md.fk_menu = m.rowid AND md.fk_constraint = mc.rowid";
2511 $sql .=
" AND m.enabled = '1'";
2512 $resql = $db->query($sql);
2515 $num = $db->num_rows($resql);
2518 $obj = $db->fetch_object($resql);
2520 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"menu SET";
2521 $sql .=
" enabled = '".$db->escape($obj->action).
"'";
2522 $sql .=
" WHERE rowid = ".((int) $obj->rowid);
2523 $sql .=
" AND enabled = '1'";
2525 $resql2 = $db->query($sql);
2546 print $langs->trans(
'AlreadyDone').
"<br>\n";
2565 print
'<tr><td colspan="4">';
2568 print
'<b>'.$langs->trans(
'MigrationDeliveryAddress').
"</b><br>\n";
2572 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"co_exp")) {
2575 $sql =
"SELECT c.fk_adresse_livraison, ce.fk_expedition";
2576 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande as c";
2577 $sql .=
", ".MAIN_DB_PREFIX.
"co_exp as ce";
2578 $sql .=
" WHERE c.rowid = ce.fk_commande";
2579 $sql .=
" AND c.fk_adresse_livraison IS NOT NULL AND c.fk_adresse_livraison != 0";
2581 $resql = $db->query($sql);
2584 $num = $db->num_rows($resql);
2588 $obj = $db->fetch_object($resql);
2590 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
2591 $sql .=
" fk_adresse_livraison = '".$db->escape($obj->fk_adresse_livraison).
"'";
2592 $sql .=
" WHERE rowid = ".((int) $obj->fk_expedition);
2594 $resql2 = $db->query($sql);
2603 print $langs->trans(
'AlreadyDone').
"<br>\n";
2616 print $langs->trans(
'AlreadyDone').
"<br>\n";
2635 if (($db->type ==
'mysql' || $db->type ==
'mysqli')) {
2637 dolibarr_install_syslog(
"upgrade2::migrate_restore_missing_links Version of database too old to make this migrate action");
2641 print
'<tr><td colspan="4">';
2644 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (1)<br>\n";
2650 $table1 =
'facturedet';
2651 $field1 =
'fk_remise_except';
2652 $table2 =
'societe_remise_except';
2653 $field2 =
'fk_facture_line';
2657 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2658 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2659 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2660 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2661 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2664 $resql = $db->query($sql);
2667 $num = $db->num_rows($resql);
2671 $obj = $db->fetch_object($resql);
2673 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2675 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2676 $sql .=
" ".$db->sanitize($field2).
" = '".$db->escape($obj->rowid).
"'";
2677 $sql .=
" WHERE rowid = ".((int) $obj->field);
2679 $resql2 = $db->query($sql);
2688 print $langs->trans(
'AlreadyDone').
"<br>\n";
2704 print
'<tr><td colspan="4">';
2707 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (2)<br>\n";
2710 $table2 =
'facturedet';
2711 $field2 =
'fk_remise_except';
2712 $table1 =
'societe_remise_except';
2713 $field1 =
'fk_facture_line';
2717 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2718 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2719 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2720 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2721 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2724 $resql = $db->query($sql);
2727 $num = $db->num_rows($resql);
2731 $obj = $db->fetch_object($resql);
2733 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2735 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2736 $sql .=
" ".$db->sanitize($field2).
" = '".$db->escape($obj->rowid).
"'";
2737 $sql .=
" WHERE rowid = ".((int) $obj->field);
2739 $resql2 = $db->query($sql);
2748 print $langs->trans(
'AlreadyDone').
"<br>\n";
2763 return ($error ? -1 : 1);
2778 print
'<tr><td colspan="4">';
2781 print
'<b>'.$langs->trans(
'MigrationProjectUserResp').
"</b><br>\n";
2783 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"projet",
"fk_user_resp");
2784 $obj = $db->fetch_object($result);
2790 $sql =
"SELECT rowid, fk_user_resp FROM ".MAIN_DB_PREFIX.
"projet";
2791 $resql = $db->query($sql);
2794 $num = $db->num_rows($resql);
2798 $obj = $db->fetch_object($resql);
2800 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2801 $sql2 .=
"datecreate";
2802 $sql2 .=
", statut";
2803 $sql2 .=
", element_id";
2804 $sql2 .=
", fk_c_type_contact";
2805 $sql2 .=
", fk_socpeople";
2806 $sql2 .=
") VALUES (";
2807 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2809 $sql2 .=
", ".$obj->rowid;
2811 $sql2 .=
", ".$obj->fk_user_resp;
2814 if ($obj->fk_user_resp > 0) {
2815 $resql2 = $db->query($sql2);
2828 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"projet DROP COLUMN fk_user_resp";
2829 if ($db->query($sqlDrop)) {
2842 print $langs->trans(
'AlreadyDone').
"<br>\n";
2859 print
'<tr><td colspan="4">';
2862 print
'<b>'.$langs->trans(
'MigrationProjectTaskActors').
"</b><br>\n";
2864 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"projet_task_actors")) {
2869 $sql =
"SELECT fk_projet_task as fk_project_task, fk_user FROM ".MAIN_DB_PREFIX.
"projet_task_actors";
2870 $resql = $db->query($sql);
2873 $num = $db->num_rows($resql);
2877 $obj = $db->fetch_object($resql);
2879 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2880 $sql2 .=
"datecreate";
2881 $sql2 .=
", statut";
2882 $sql2 .=
", element_id";
2883 $sql2 .=
", fk_c_type_contact";
2884 $sql2 .=
", fk_socpeople";
2885 $sql2 .=
") VALUES (";
2886 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2888 $sql2 .=
", ".$obj->fk_project_task;
2890 $sql2 .=
", ".$obj->fk_user;
2893 $resql2 = $db->query($sql2);
2905 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.
"projet_task_actors";
2906 if ($db->query($sqlDrop)) {
2919 print $langs->trans(
'AlreadyDone').
"<br>\n";
2939 print
'<tr><td colspan="4">';
2942 print
'<b>'.$langs->trans(
'MigrationRelationshipTables', MAIN_DB_PREFIX.$table).
"</b><br>\n";
2946 if ($db->DDLInfoTable(MAIN_DB_PREFIX.$table)) {
2951 $sqlSelect =
"SELECT ".$fk_source.
", ".$fk_target;
2952 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.$table;
2954 $resql = $db->query($sqlSelect);
2957 $num = $db->num_rows($resql);
2961 $obj = $db->fetch_object($resql);
2963 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
2964 $sqlInsert .=
"fk_source";
2965 $sqlInsert .=
", sourcetype";
2966 $sqlInsert .=
", fk_target";
2967 $sqlInsert .=
", targettype";
2968 $sqlInsert .=
") VALUES (";
2969 $sqlInsert .= $obj->$fk_source;
2970 $sqlInsert .=
", '".$db->escape($sourcetype).
"'";
2971 $sqlInsert .=
", ".$obj->$fk_target;
2972 $sqlInsert .=
", '".$db->escape($targettype).
"'";
2975 $result = $db->query($sqlInsert);
2984 print $langs->trans(
'AlreadyDone').
"<br>\n";
2988 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.$table;
2989 if ($db->query($sqlDrop)) {
3002 print $langs->trans(
'AlreadyDone').
"<br>\n";
3020 print
'<tr><td colspan="4">';
3023 print
'<b>'.$langs->trans(
'MigrationProjectTaskTime').
"</b><br>\n";
3029 $sql =
"SELECT rowid, fk_element, element_duration";
3030 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_time";
3031 $resql = $db->query($sql);
3034 $num = $db->num_rows($resql);
3037 $totaltime = array();
3041 $obj = $db->fetch_object($resql);
3043 if ($obj->element_duration > 0) {
3046 list($hour, $min) = explode(
'.', $obj->element_duration);
3047 $hour = (int) $hour * 60 * 60;
3048 $min = (int) ((
float) (
'.'.$min)) * 3600;
3049 $newtime = $hour + $min;
3051 $sql2 =
"UPDATE ".MAIN_DB_PREFIX.
"element_time SET";
3052 $sql2 .=
" element_duration = ".((int) $newtime);
3053 $sql2 .=
" WHERE rowid = ".((int) $obj->rowid);
3055 $resql2 = $db->query($sql2);
3062 if (!empty($totaltime[$obj->fk_element])) {
3063 $totaltime[$obj->fk_element] += $newtime;
3065 $totaltime[$obj->fk_element] = $newtime;
3068 if (!empty($totaltime[$obj->fk_element])) {
3069 $totaltime[$obj->fk_element] += $obj->element_duration;
3071 $totaltime[$obj->fk_element] = $obj->element_duration;
3080 foreach ($totaltime as $taskid => $total_duration) {
3081 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"projet_task SET";
3082 $sql .=
" duration_effective = ".((int) $total_duration);
3083 $sql .=
" WHERE rowid = ".((int) $taskid);
3085 $resql = $db->query($sql);
3092 print $langs->trans(
'AlreadyDone').
"<br>\n";
3098 print $langs->trans(
'AlreadyDone').
"<br>\n";
3123 print
'<tr><td colspan="4">';
3126 print
'<b>'.$langs->trans(
'MigrationCustomerOrderShipping').
"</b><br>\n";
3130 $result1 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"ref_customer");
3131 $result2 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"date_delivery");
3132 $obj1 = $db->fetch_object($result1);
3133 $obj2 = $db->fetch_object($result2);
3134 if (!$obj1 && !$obj2) {
3139 $sqlAdd1 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN ref_customer varchar(30) AFTER entity";
3140 $sqlAdd2 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition";
3142 if ($db->query($sqlAdd1) && $db->query($sqlAdd2)) {
3143 $sqlSelect =
"SELECT e.rowid as shipping_id, c.ref_client, c.date_livraison as delivery_date";
3144 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"expedition as e";
3145 $sqlSelect .=
", ".MAIN_DB_PREFIX.
"element_element as el";
3146 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"commande as c ON c.rowid = el.fk_source AND el.sourcetype = 'commande'";
3147 $sqlSelect .=
" WHERE e.rowid = el.fk_target";
3148 $sqlSelect .=
" AND el.targettype = 'shipping'";
3150 $resql = $db->query($sqlSelect);
3153 $num = $db->num_rows($resql);
3157 $obj = $db->fetch_object($resql);
3159 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
3160 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_client).
"'";
3161 $sqlUpdate .=
", date_delivery = '".$db->escape($obj->delivery_date ? $obj->delivery_date :
'null').
"'";
3162 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->shipping_id);
3164 $result = $db->query($sqlUpdate);
3173 print $langs->trans(
'AlreadyDone').
"<br>\n";
3191 print $langs->trans(
'AlreadyDone').
"<br>\n";
3207 print
'<tr><td colspan="4">';
3210 print
'<b>'.$langs->trans(
'MigrationShippingDelivery').
"</b><br>\n";
3214 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_expedition");
3215 $obj = $db->fetch_object($result);
3221 $sqlSelect =
"SELECT rowid, fk_expedition";
3222 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
3223 $sqlSelect .=
" WHERE fk_expedition is not null";
3225 $resql = $db->query($sqlSelect);
3228 $num = $db->num_rows($resql);
3232 $obj = $db->fetch_object($resql);
3234 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
3235 $sqlInsert .=
"fk_source";
3236 $sqlInsert .=
", sourcetype";
3237 $sqlInsert .=
", fk_target";
3238 $sqlInsert .=
", targettype";
3239 $sqlInsert .=
") VALUES (";
3240 $sqlInsert .= $obj->fk_expedition;
3241 $sqlInsert .=
", 'shipping'";
3242 $sqlInsert .=
", ".$obj->rowid;
3243 $sqlInsert .=
", 'delivery'";
3246 $result = $db->query($sqlInsert);
3248 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET fk_expedition = NULL";
3249 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3251 $result = $db->query($sqlUpdate);
3264 print $langs->trans(
'AlreadyDone').
"<br>\n";
3268 $sqlDelete =
"DELETE FROM ".MAIN_DB_PREFIX.
"element_element WHERE sourcetype = 'commande' AND targettype = 'delivery'";
3269 $db->query($sqlDelete);
3274 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_expedition";
3275 $db->query($sqlDrop);
3285 print $langs->trans(
'AlreadyDone').
"<br>\n";
3302 print
'<tr><td colspan="4">';
3305 print
'<b>'.$langs->trans(
'MigrationShippingDelivery2').
"</b><br>\n";
3313 $sqlSelect =
"SELECT l.rowid as delivery_id, e.ref_customer, e.date_delivery";
3314 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l,";
3315 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"element_element as el,";
3316 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"expedition as e";
3317 $sqlSelect .=
" WHERE l.rowid = el.fk_target";
3318 $sqlSelect .=
" AND el.targettype = 'delivery'";
3319 $sqlSelect .=
" AND e.rowid = el.fk_source AND el.sourcetype = 'shipping'";
3320 $sqlSelect .=
" AND (e.ref_customer IS NOT NULL OR e.date_delivery IS NOT NULL)";
3322 $sqlSelect .=
" AND (l.ref_customer IS NULL".($db->type !=
'pgsql' ?
" or l.ref_customer = ''" :
"").
")";
3323 $sqlSelect .=
" AND (l.date_delivery IS NULL".($db->type !=
'pgsql' ?
" or l.date_delivery = ''" :
"").
")";
3325 $resql = $db->query($sqlSelect);
3328 $num = $db->num_rows($resql);
3332 $obj = $db->fetch_object($resql);
3334 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
3335 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_customer).
"',";
3336 $sqlUpdate .=
" date_delivery = ".($obj->date_delivery ?
"'".$db->escape($obj->date_delivery).
"'" :
'null');
3337 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->delivery_id);
3339 $result = $db->query($sqlUpdate);
3348 print $langs->trans(
'AlreadyDone').
"<br>\n";
3375 print
'<tr><td colspan="4">';
3378 print
'<b>'.$langs->trans(
'MigrationActioncommElement').
"</b><br>\n";
3381 'propal' =>
'propalrowid',
3382 'order' =>
'fk_commande',
3383 'invoice' =>
'fk_facture',
3384 'contract' =>
'fk_contract',
3385 'order_supplier' =>
'fk_supplier_order',
3386 'invoice_supplier' =>
'fk_supplier_invoice'
3389 foreach ($elements as $type => $field) {
3390 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"actioncomm", $field);
3391 $obj = $db->fetch_object($result);
3397 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"actioncomm SET ";
3398 $sql .=
"fk_element = ".$db->sanitize($field).
", elementtype = '".$db->escape($type).
"'";
3399 $sql .=
" WHERE ".$db->sanitize($field).
" IS NOT NULL";
3400 $sql .=
" AND fk_element IS NULL";
3401 $sql .=
" AND elementtype IS NULL";
3403 $resql = $db->query($sql);
3417 print $langs->trans(
'AlreadyDone').
"<br>\n";
3434 print
'<tr><td colspan="4">';
3437 print
'<b>'.$langs->trans(
'MigrationPaymentMode').
"</b><br>\n";
3440 'old_id' => array(5, 8, 9, 10, 11),
3441 'new_id' => array(50, 51, 52, 53, 54),
3442 'code' => array(
'VAD',
'TRA',
'LCR',
'FAC',
'PRO'),
3443 'tables' => array(
'commande_fournisseur',
'commande',
'facture_rec',
'facture',
'propal')
3447 foreach ($elements[
'old_id'] as $key => $old_id) {
3452 $sqlSelect =
"SELECT id";
3453 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"c_paiement";
3454 $sqlSelect .=
" WHERE id = ".((int) $old_id);
3455 $sqlSelect .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3457 $resql = $db->query($sqlSelect);
3459 $num = $db->num_rows($resql);
3465 $sqla =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET";
3466 $sqla .=
" fk_paiement = ".((int) $elements[
'new_id'][$key]);
3467 $sqla .=
" WHERE fk_paiement = ".((int) $old_id);
3468 $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]).
"')";
3469 $resqla = $db->query($sqla);
3471 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"c_paiement SET";
3472 $sql .=
" id = ".((int) $elements[
'new_id'][$key]);
3473 $sql .=
" WHERE id = ".((int) $old_id);
3474 $sql .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3475 $resql = $db->query($sql);
3477 if ($resqla && $resql) {
3478 foreach ($elements[
'tables'] as $table) {
3479 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table.
" SET ";
3480 $sql .=
"fk_mode_reglement = ".((int) $elements[
'new_id'][$key]);
3481 $sql .=
" WHERE fk_mode_reglement = ".((int) $old_id);
3483 $resql = $db->query($sql);
3506 print $langs->trans(
'AlreadyDone').
"<br>\n";
3524 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"categorie_association");
3526 $obj = $db->fetch_object($result);
3529 $children = array();
3530 $sql =
"SELECT fk_categorie_mere, fk_categorie_fille";
3531 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3533 $resql = $db->query($sql);
3535 $num = $db->num_rows($resql);
3536 while ($obj = $db->fetch_object($resql)) {
3537 if (!isset($children[$obj->fk_categorie_fille])) {
3538 if ($obj->fk_categorie_mere != $obj->fk_categorie_fille) {
3539 $children[$obj->fk_categorie_fille] = 1;
3540 $couples[$obj->fk_categorie_mere.
'_'.$obj->fk_categorie_fille] = array(
'mere' => $obj->fk_categorie_mere,
'fille' => $obj->fk_categorie_fille);
3548 if (count($couples) > 0 && $num > count($couples)) {
3554 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_association";
3556 $resqld = $db->query($sql);
3559 foreach ($couples as $key => $val) {
3560 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_association(fk_categorie_mere,fk_categorie_fille)";
3561 $sql .=
" VALUES(".((int) $val[
'mere']).
", ".((int) $val[
'fille']).
")";
3563 $resqli = $db->query($sql);
3571 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3572 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Success").
' ('.$num.
'=>'.count($couples).
')</td></tr>';
3575 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3576 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Failed").
'</td></tr>';
3581 print
'<tr><td>'.$langs->trans(
"Error").
'</td>';
3582 print
'<td class="right"><div class="error">'.$db->lasterror().
'</div></td></tr>';
3599 print
'<tr><td colspan="4">';
3602 print
'<b>'.$langs->trans(
'MigrationCategorieAssociation').
"</b><br>\n";
3606 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"categorie_association")) {
3611 $sqlSelect =
"SELECT fk_categorie_mere, fk_categorie_fille";
3612 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3614 $resql = $db->query($sqlSelect);
3617 $num = $db->num_rows($resql);
3621 $obj = $db->fetch_object($resql);
3623 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"categorie SET ";
3624 $sqlUpdate .=
"fk_parent = ".((int) $obj->fk_categorie_mere);
3625 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->fk_categorie_fille);
3627 $result = $db->query($sqlUpdate);
3636 print $langs->trans(
'AlreadyDone').
"<br>\n";
3649 print $langs->trans(
'AlreadyDone').
"<br>\n";
3665 print
'<tr><td colspan="4">';
3668 print
'<b>'.$langs->trans(
'MigrationEvents').
"</b><br>\n";
3676 $sqlSelect =
"SELECT a.id, a.fk_user_action";
3677 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3678 $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";
3679 $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')";
3680 $sqlSelect .=
" ORDER BY a.id";
3683 $resql = $db->query($sqlSelect);
3686 $num = $db->num_rows($resql);
3690 $obj = $db->fetch_object($resql);
3692 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3693 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'user', ".((int) $obj->fk_user_action).
")";
3695 $result = $db->query($sqlUpdate);
3704 print $langs->trans(
'AlreadyDone').
"<br>\n";
3731 print
'<tr><td colspan="4">';
3734 print
'<b>'.$langs->trans(
'MigrationEventsContact').
"</b><br>\n";
3742 $sqlSelect =
"SELECT a.id, a.fk_contact";
3743 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3744 $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";
3745 $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')";
3746 $sqlSelect .=
" ORDER BY a.id";
3749 $resql = $db->query($sqlSelect);
3752 $num = $db->num_rows($resql);
3756 $obj = $db->fetch_object($resql);
3758 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3759 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'socpeople', ".((int) $obj->fk_contact).
")";
3761 $result = $db->query($sqlUpdate);
3770 print $langs->trans(
'AlreadyDone').
"<br>\n";
3800 require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
3802 print
'<tr><td colspan="4">';
3805 print
'<b>'.$langs->trans(
'MigrationResetBlockedLog').
"</b><br>\n";
3813 $sqlSelect =
"SELECT DISTINCT entity";
3814 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"blockedlog";
3818 $resql = $db->query($sqlSelect);
3821 $num = $db->num_rows($resql);
3825 $obj = $db->fetch_object($resql);
3827 print
'Process entity '.$obj->entity;
3829 $sqlSearch =
"SELECT count(rowid) as nb FROM ".MAIN_DB_PREFIX.
"blockedlog WHERE action = 'MODULE_SET' and entity = ".((int) $obj->entity);
3830 $resqlSearch = $db->query($sqlSearch);
3832 $objSearch = $db->fetch_object($resqlSearch);
3834 if ($objSearch && $objSearch->nb == 0) {
3835 print
' - Record for entity must be reset...';
3837 $sqlUpdate =
"DELETE FROM ".MAIN_DB_PREFIX.
"blockedlog";
3838 $sqlUpdate .=
" WHERE entity = ".((int) $obj->entity);
3839 $resqlUpdate = $db->query($sqlUpdate);
3840 if (!$resqlUpdate) {
3849 $object->entity = $obj->entity;
3853 $b->setObjectData(
$object,
'MODULE_SET', 0);
3855 $res = $b->create($user);
3861 print
' - '.$langs->trans(
'AlreadyInV7').
'<br>';
3870 print $langs->trans(
'NothingToDo').
"<br>\n";
3897 print
'<tr><td colspan="4">';
3900 print
'<b>'.$langs->trans(
'MigrationRemiseEntity').
"</b><br>\n";
3908 $sqlSelect =
"SELECT sr.rowid, s.entity";
3909 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise as sr, ".MAIN_DB_PREFIX.
"societe as s";
3910 $sqlSelect .=
" WHERE sr.fk_soc = s.rowid and sr.entity != s.entity";
3914 $resql = $db->query($sqlSelect);
3917 $num = $db->num_rows($resql);
3921 $obj = $db->fetch_object($resql);
3923 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise SET";
3924 $sqlUpdate .=
" entity = ".$obj->entity;
3925 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3927 $result = $db->query($sqlUpdate);
3937 print $langs->trans(
'AlreadyDone').
"<br>\n";
3963 print
'<tr><td colspan="4">';
3966 print
'<b>'.$langs->trans(
'MigrationRemiseExceptEntity').
"</b><br>\n";
3974 $sqlSelect =
"SELECT sr.rowid, sr.fk_soc, sr.fk_facture_source, sr.fk_facture, sr.fk_facture_line";
3975 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as sr";
3978 $resql = $db->query($sqlSelect);
3981 $num = $db->num_rows($resql);
3985 $obj = $db->fetch_object($resql);
3987 if (!empty($obj->fk_facture_source) || !empty($obj->fk_facture)) {
3988 $fk_facture = (!empty($obj->fk_facture_source) ? $obj->fk_facture_source : $obj->fk_facture);
3990 $sqlSelect2 =
"SELECT f.entity";
3991 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f";
3992 $sqlSelect2 .=
" WHERE f.rowid = ".((int) $fk_facture);
3993 } elseif (!empty($obj->fk_facture_line)) {
3994 $sqlSelect2 =
"SELECT f.entity";
3995 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f, ".MAIN_DB_PREFIX.
"facturedet as fd";
3996 $sqlSelect2 .=
" WHERE fd.rowid = ".((int) $obj->fk_facture_line);
3997 $sqlSelect2 .=
" AND fd.fk_facture = f.rowid";
3999 $sqlSelect2 =
"SELECT s.entity";
4000 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
4001 $sqlSelect2 .=
" WHERE s.rowid = ".((int) $obj->fk_soc);
4004 $resql2 = $db->query($sqlSelect2);
4006 if ($db->num_rows($resql2) > 0) {
4007 $obj2 = $db->fetch_object($resql2);
4009 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise_except SET";
4010 $sqlUpdate .=
" entity = ".((int) $obj2->entity);
4011 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
4013 $result = $db->query($sqlUpdate);
4028 print $langs->trans(
'AlreadyDone').
"<br>\n";
4055 print
'<tr><td colspan="4">';
4057 print
'<b>'.$langs->trans(
'MigrationUserRightsEntity').
"</b><br>\n";
4065 $sqlSelect =
"SELECT u.rowid, u.entity";
4066 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"user as u";
4067 $sqlSelect .=
" WHERE u.entity > 1";
4070 $resql = $db->query($sqlSelect);
4073 $num = $db->num_rows($resql);
4077 $obj = $db->fetch_object($resql);
4079 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"user_rights SET";
4080 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4081 $sqlUpdate .=
" WHERE fk_user = ".((int) $obj->rowid);
4083 $result = $db->query($sqlUpdate);
4093 print $langs->trans(
'AlreadyDone').
"<br>\n";
4120 print
'<tr><td colspan="4">';
4122 print
'<b>'.$langs->trans(
'MigrationUserGroupRightsEntity').
"</b><br>\n";
4130 $sqlSelect =
"SELECT u.rowid, u.entity";
4131 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"usergroup as u";
4132 $sqlSelect .=
" WHERE u.entity > 1";
4135 $resql = $db->query($sqlSelect);
4138 $num = $db->num_rows($resql);
4142 $obj = $db->fetch_object($resql);
4144 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"usergroup_rights SET";
4145 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4146 $sqlUpdate .=
" WHERE fk_usergroup = ".((int) $obj->rowid);
4148 $result = $db->query($sqlUpdate);
4158 print $langs->trans(
'AlreadyDone').
"<br>\n";
4189 if (is_dir(DOL_DATA_ROOT.$oldname) && !file_exists(DOL_DATA_ROOT.$newname)) {
4190 dolibarr_install_syslog(
"upgrade2::migrate_rename_directories move ".DOL_DATA_ROOT.$oldname.
' into '.DOL_DATA_ROOT.$newname);
4191 @rename(DOL_DATA_ROOT.$oldname, DOL_DATA_ROOT.$newname);
4211 $filetodeletearray = array(
4212 '/core/ajax/ajaxcompanies.php',
4213 '/core/triggers/interface_demo.class.php',
4214 '/core/menus/barre_left/default.php',
4215 '/core/menus/barre_top/default.php',
4216 '/core/modules/modComptabiliteExpert.class.php',
4217 '/core/modules/modCommercial.class.php',
4218 '/core/modules/modProduit.class.php',
4219 '/core/modules/modSkype.class.php',
4220 '/core/modules/modactivite.class.php',
4221 '/core/triggers/interface_modWebcalendar_Webcalsynchro.class.php',
4222 '/core/triggers/interface_modCommande_Ecotax.class.php',
4223 '/core/triggers/interface_modCommande_fraisport.class.php',
4224 '/core/triggers/interface_modPropale_PropalWorkflow.class.php',
4225 '/core/triggers/interface_99_modWebhook_WebhookTriggers.class.php',
4226 '/core/triggers/interface_99_modZapier_ZapierTriggers.class.php',
4227 '/core/menus/smartphone/iphone.lib.php',
4228 '/core/menus/smartphone/iphone_backoffice.php',
4229 '/core/menus/smartphone/iphone_frontoffice.php',
4230 '/core/menus/standard/auguria_backoffice.php',
4231 '/core/menus/standard/auguria_frontoffice.php',
4232 '/core/menus/standard/eldy_backoffice.php',
4233 '/core/menus/standard/eldy_frontoffice.php',
4234 '/core/modules/export/export_excel.modules.php',
4235 '/core/modules/export/export_csv.modules.php',
4236 '/core/modules/export/exportcsv.modules.php',
4237 '/core/modules/export/export_excel2007new.modules.php',
4238 '/core/modules/facture/pdf_crabe.modules.php',
4239 '/core/modules/facture/pdf_oursin.modules.php',
4240 '/core/modules/mailings/contacts2.modules.php',
4241 '/core/modules/mailings/contacts3.modules.php',
4242 '/core/modules/mailings/contacts4.modules.php',
4243 '/core/modules/mailings/framboise.modules.php',
4244 '/core/modules/mailings/dolibarr_services_expired.modules.php',
4245 '/core/modules/mailings/peche.modules.php',
4246 '/core/modules/mailings/poire.modules.php',
4247 '/core/modules/mailings/kiwi.modules.php',
4248 '/core/modules/syslog/mod_syslog_chromephp.php',
4249 '/core/modules/syslog/mod_syslog_firephp.php',
4250 '/core/modules/syslog/logHandlerInterface.php',
4251 '/core/boxes/box_members.php',
4253 '/includes/restler/framework/Luracast/Restler/Data/Object.php',
4254 '/includes/nusoap/lib/class.*',
4255 '/phenix/inc/triggers/interface_modPhenix_Phenixsynchro.class.php',
4256 '/webcalendar/inc/triggers/interface_modWebcalendar_webcalsynchro.class.php',
4258 '/api/class/api_generic.class.php',
4259 '/asterisk/cidlookup.php',
4260 '/categories/class/api_category.class.php',
4261 '/categories/class/api_deprecated_category.class.php',
4262 '/compta/facture/class/api_invoice.class.php',
4263 '/commande/class/api_commande.class.php',
4264 '/partnership/class/api_partnership.class.php',
4265 '/product/class/api_product.class.php',
4266 '/recruitment/class/api_recruitment.class.php',
4267 '/societe/class/api_contact.class.php',
4268 '/societe/class/api_thirdparty.class.php',
4269 '/support/online.php',
4270 '/takepos/class/actions_takepos.class.php',
4271 '/user/class/api_user.class.php',
4273 '/install/mysql/tables/llx_c_ticketsup_category.key.sql',
4274 '/install/mysql/tables/llx_c_ticketsup_category.sql',
4275 '/install/mysql/tables/llx_c_ticketsup_severity.key.sql',
4276 '/install/mysql/tables/llx_c_ticketsup_severity.sql',
4277 '/install/mysql/tables/llx_c_ticketsup_type.key.sql',
4278 '/install/mysql/tables/llx_c_ticketsup_type.sql'
4287 foreach ($filetodeletearray as $filetodelete) {
4289 if (preg_match(
'/\*/', $filetodelete) || file_exists(DOL_DOCUMENT_ROOT.$filetodelete)) {
4291 $result =
dol_delete_file(DOL_DOCUMENT_ROOT.$filetodelete, 0, (preg_match(
'/\*/', $filetodelete) ? 1 : 0), 0,
null,
true, 0);
4293 $langs->load(
"errors");
4294 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteFile", DOL_DOCUMENT_ROOT.$filetodelete);
4295 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4320 $filetodeletearray = array(
4321 DOL_DOCUMENT_ROOT.
'/core/modules/facture/terre',
4322 DOL_DOCUMENT_ROOT.
'/core/modules/facture/mercure',
4326 if (!empty($_SERVER[
"WINDIR"])) {
4327 $filetodeletearray[] = DOL_DOCUMENT_ROOT.
'/includes/phpoffice/PhpSpreadsheet';
4330 foreach ($filetodeletearray as $filetodelete) {
4332 if (file_exists($filetodelete)) {
4336 $langs->load(
"errors");
4337 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteDir", $filetodelete);
4338 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4362 if (count($listofmodule) == 0) {
4366 if (!is_object($user)) {
4367 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4368 $user =
new User($db);
4371 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules force=".$force.
", listofmodule=".implode(
',', array_keys($listofmodule)), LOG_NOTICE);
4373 $reloadactionformodules = array(
4374 'MAIN_MODULE_AGENDA' => array(
'class' =>
'modAgenda',
'remove' => 1),
4375 'MAIN_MODULE_API' => array(
'class' =>
'modApi'),
4376 'MAIN_MODULE_BARCODE' => array(
'class' =>
'modBarcode',
'remove' => 1),
4377 'MAIN_MODULE_BLOCKEDLOG' => array(
'class' =>
'modBlockedLog',
'deleteinsertmenus' => 1),
4378 'MAIN_MODULE_CRON' => array(
'class' =>
'modCron',
'remove' => 1),
4379 'MAIN_MODULE_EXTERNALSITE' => array(
'class' =>
'modExternalSite',
'remove' => 1),
4380 'MAIN_MODULE_SOCIETE' => array(
'class' =>
'modSociete',
'remove' => 1),
4381 'MAIN_MODULE_PRODUIT' => array(
'class' =>
'modProduct'),
4382 'MAIN_MODULE_SERVICE' => array(
'class' =>
'modService'),
4383 'MAIN_MODULE_COMMANDE' => array(
'class' =>
'modCommande'),
4384 'MAIN_MODULE_DON' => array(
'class' =>
'modDon'),
4385 'MAIN_MODULE_FACTURE' => array(
'class' =>
'modFacture'),
4386 'MAIN_MODULE_FICHEINTER' => array(
'class' =>
'modFicheinter'),
4387 'MAIN_MODULE_FOURNISSEUR' => array(
'class' =>
'modFournisseur'),
4388 'MAIN_MODULE_EXPEDITION' => array(
'class' =>
'modExpedition'),
4389 'MAIN_MODULE_EXPENSEREPORT' => array(
'class' =>
'modExpenseReport'),
4390 'MAIN_MODULE_EVENTORGANIZATION' => array(
'class' =>
'modEventOrganization',
'remove' => 1),
4391 'MAIN_MODULE_ECM' => array(
'class' =>
'modECM',
'remove' => 1),
4392 'MAIN_MODULE_HOLIDAY' => array(
'class' =>
'modHoliday',
'remove' => 1),
4393 'MAIN_MODULE_KNOWLEDGEMANAGEMENT' => array(
'class' =>
'modKnowledgeManagement',
'remove' => 1),
4394 'MAIN_MODULE_LOAN' => array(
'class' =>
'modLoan',
'remove' => 1),
4395 'MAIN_MODULE_PAYBOX' => array(
'class' =>
'modPaybox',
'remove' => 1),
4396 'MAIN_MODULE_PROPAL' => array(
'class' =>
'modPropale'),
4397 'MAIN_MODULE_SUPPLIERPROPOSAL' => array(
'class' =>
'modSupplierProposal',
'remove' => 1),
4398 'MAIN_MODULE_OPENSURVEY' => array(
'class' =>
'modOpenSurvey',
'remove' => 1),
4399 'MAIN_MODULE_PRODUCTBATCH' => array(
'class' =>
'modProductBatch',
'remove' => 1),
4400 'MAIN_MODULE_TAKEPOS' => array(
'class' =>
'modTakePos',
'remove' => 1),
4401 'MAIN_MODULE_VARIANTS' => array(
'class' =>
'modVariants',
'remove' => 1),
4402 'MAIN_MODULE_EMAILCOLLECTOR' => array(
'class' =>
'modEmailCollector',
'remove' => 1),
4405 foreach ($listofmodule as $moduletoreload => $reloadmode) {
4406 if (empty($moduletoreload) || (empty(
$conf->global->$moduletoreload) && !$force)) {
4412 if (!empty($reloadactionformodules[$moduletoreload])) {
4413 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreload.
" with mode ".$reloadmode);
4415 $val = $reloadactionformodules[$moduletoreload];
4416 $classformodule = $val[
'class'];
4417 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/'.$classformodule.
'.class.php';
4419 $mod =
new $classformodule($db);
4420 if (!empty($val[
'remove'])) {
4421 $mod->remove(
'noboxes');
4423 if (!empty($val[
'deleteinsertmenus'])) {
4425 $mod->delete_menus();
4426 $mod->insert_menus();
4428 $mod->init($reloadmode);
4433 $tmp = preg_match(
'/MAIN_MODULE_([a-zA-Z0-9]+)/', $moduletoreload, $reg);
4434 if (!empty($reg[1])) {
4435 if (strtoupper($moduletoreload) == $moduletoreload) {
4436 $moduletoreloadshort = ucfirst(strtolower($reg[1]));
4438 $moduletoreloadshort = $reg[1];
4441 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreloadshort.
" with mode ".$reloadmode.
" (generic code)", LOG_NOTICE);
4443 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php';
4445 $classname =
'mod'.$moduletoreloadshort;
4446 $mod =
new $classname($db);
4447 '@phan-var-force DolibarrModules $mod';
4450 $mod->delete_menus();
4451 $mod->init($reloadmode);
4453 dolibarr_install_syslog(
'Failed to include '.DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4455 $res = @
dol_include_once(strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4457 $classname =
'mod'.$moduletoreloadshort;
4458 $mod =
new $classname($db);
4459 '@phan-var-force DolibarrModules $mod';
4460 $mod->init($reloadmode);
4462 dolibarr_install_syslog(
'Failed to include '.strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4463 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4469 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4474 if (!empty($mod) && is_object($mod)) {
4475 print
'<tr class="trforrunsql"><td colspan="4">';
4476 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: ';
4477 print $langs->trans(
'MigrationReloadModule').
' '.$mod->getName();
4478 print
"<!-- (".$reloadmode.
") -->";
4503 $listofmenuhandler = array();
4506 $listofmenuhandler[
'auguria'] = 1;
4509 foreach ($listofmenuhandler as $key => $val) {
4510 print
'<tr class="trforrunsql"><td colspan="4">';
4514 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: '.$langs->trans(
'MenuHandler').
" ".$key.
"<br>\n";
4517 $dir = DOL_DOCUMENT_ROOT.
"/core/menus/";
4518 $file =
'init_menu_'.$key.
'.sql';
4519 if (file_exists($dir.$file)) {
4520 $result =
run_sql($dir.$file, 1, 0, 1, $key);
4536 global
$conf, $db, $langs, $user;
4538 if (!is_object($user)) {
4539 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4540 $user =
new User($db);
4543 print
'<tr><td colspan="4">';
4545 print
'<b>'.$langs->trans(
'MigrationProductLotPath').
"</b><br>\n";
4547 $sql =
"SELECT rowid, entity, batch, fk_product from ".MAIN_DB_PREFIX.
"product_lot";
4548 $resql = $db->query($sql);
4551 $modulepart=
"product_batch";
4555 while ($obj = $db->fetch_object($resql)) {
4556 $entity = (empty($obj->entity) ? 1 : $obj->entity);
4558 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/'.
$conf->productbatch->multidir_output[$entity];
4560 $dir =
$conf->productbatch->multidir_output[$entity];
4564 $lot->id = $obj->rowid;
4565 $lot->ref = $obj->id;
4566 $lot->batch = $obj->batch;
4567 $lot->entity = $obj->entity;
4568 $lot->fk_product = $obj->fk_product;
4570 $savref = $lot->ref;
4572 $lot->ref = $obj->batch;
4573 $origin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4575 $lot->ref = $savref;
4576 $destin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4598 global
$conf, $db, $langs, $user;
4600 print
'<tr><td colspan="4">';
4602 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4604 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4605 $fuser =
new User($db);
4606 if (!is_object($user)) {
4610 $sql =
"SELECT rowid as uid, entity from ".MAIN_DB_PREFIX.
"user";
4611 $resql = $db->query($sql);
4613 while ($obj = $db->fetch_object($resql)) {
4615 $fuser->id = $obj->uid;
4616 $fuser->entity = $obj->entity;
4619 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4621 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4623 $dir =
$conf->user->multidir_output[$entity];
4628 $origin = $dir.
'/'.
get_exdir($fuser->id, 2, 0, 1, $fuser,
'user');
4629 $destin = $dir.
'/'.$fuser->id;
4637 $handle = opendir($origin_osencoded);
4638 if (is_resource($handle)) {
4639 while (($file = readdir($handle)) !==
false) {
4640 if ($file ==
'.' || $file ==
'..') {
4645 $thumbs = opendir($origin_osencoded.
'/'.$file);
4646 if (is_resource($thumbs)) {
4648 while (($thumb = readdir($thumbs)) !==
false) {
4650 if ($thumb ==
'.' || $thumb ==
'..') {
4656 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4666 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4687 global $db, $langs, $user;
4689 print
'<tr><td colspan="4">';
4691 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4693 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4694 $fuser =
new User($db);
4695 if (!is_object($user)) {
4699 $sql =
"SELECT rowid as uid, entity, photo from ".MAIN_DB_PREFIX.
"user";
4700 $resql = $db->query($sql);
4702 while ($obj = $db->fetch_object($resql)) {
4704 $fuser->id = $obj->uid;
4705 $fuser->entity = $obj->entity;
4706 $fuser->photo = $obj->photo;
4709 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4711 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4713 $dir = DOL_DATA_ROOT.
'/users';
4718 $origin = $dir.
'/'.$fuser->id;
4719 $destin = $dir.
'/'.$fuser->id.
'/photos';
4727 $handle = opendir($origin_osencoded);
4728 if (is_resource($handle)) {
4729 while (($file = readdir($handle)) !==
false) {
4730 if ($file ==
'.' || $file ==
'..' || $file ==
'photos') {
4733 if (!empty($fuser->photo) && ($file != $fuser->photo && $file !=
'thumbs')) {
4738 $thumbs = opendir($origin_osencoded.
'/'.$file);
4739 if (is_resource($thumbs)) {
4741 while (($thumb = readdir($thumbs)) !==
false) {
4743 if ($thumb ==
'.' || $thumb ==
'..') {
4749 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4758 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4795 print
'<tr><td colspan="4">';
4796 $sql =
'SELECT rowid, socialnetworks';
4797 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'user WHERE';
4798 $sql .=
" skype IS NOT NULL OR skype <> ''";
4799 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4800 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4801 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4802 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4803 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4804 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4805 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4806 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4808 $resql = $db->query($sql);
4810 while ($obj = $db->fetch_object($resql)) {
4811 $arraysocialnetworks = array();
4812 if (!empty($obj->skype)) {
4813 $arraysocialnetworks[
'skype'] = $obj->skype;
4815 if (!empty($obj->twitter)) {
4816 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4818 if (!empty($obj->facebook)) {
4819 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4821 if (!empty($obj->linkedin)) {
4822 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4824 if (!empty($obj->instagram)) {
4825 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4827 if (!empty($obj->snapchat)) {
4828 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4830 if (!empty($obj->googleplus)) {
4831 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4833 if (!empty($obj->youtube)) {
4834 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4836 if (!empty($obj->whatsapp)) {
4837 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4839 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4840 $obj->socialnetworks =
'[]';
4842 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4843 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"user SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
4844 $sqlupd .=
', skype=null';
4845 $sqlupd .=
', twitter=null';
4846 $sqlupd .=
', facebook=null';
4847 $sqlupd .=
', linkedin=null';
4848 $sqlupd .=
', instagram=null';
4849 $sqlupd .=
', snapchat=null';
4850 $sqlupd .=
', googleplus=null';
4851 $sqlupd .=
', youtube=null';
4852 $sqlupd .=
', whatsapp=null';
4853 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4855 $resqlupd = $db->query($sqlupd);
4870 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Users').
"</b><br>\n";
4884 print
'<tr><td colspan="4">';
4887 print
'<tr><td colspan="4">';
4888 $sql =
'SELECT rowid, socialnetworks';
4889 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'adherent WHERE ';
4890 $sql .=
" skype IS NOT NULL OR skype <> ''";
4891 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4892 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4893 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4894 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4895 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4896 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4897 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4898 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4900 $resql = $db->query($sql);
4902 while ($obj = $db->fetch_object($resql)) {
4903 $arraysocialnetworks = array();
4904 if (!empty($obj->skype)) {
4905 $arraysocialnetworks[
'skype'] = $obj->skype;
4907 if (!empty($obj->twitter)) {
4908 $arraysocialnetworks[
'twitter'] = $obj->twitter;
4910 if (!empty($obj->facebook)) {
4911 $arraysocialnetworks[
'facebook'] = $obj->facebook;
4913 if (!empty($obj->linkedin)) {
4914 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
4916 if (!empty($obj->instagram)) {
4917 $arraysocialnetworks[
'instagram'] = $obj->instagram;
4919 if (!empty($obj->snapchat)) {
4920 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
4922 if (!empty($obj->googleplus)) {
4923 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
4925 if (!empty($obj->youtube)) {
4926 $arraysocialnetworks[
'youtube'] = $obj->youtube;
4928 if (!empty($obj->whatsapp)) {
4929 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
4931 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
4932 $obj->socialnetworks =
'[]';
4934 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
4935 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"adherent SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
4936 $sqlupd .=
', skype=null';
4937 $sqlupd .=
', twitter=null';
4938 $sqlupd .=
', facebook=null';
4939 $sqlupd .=
', linkedin=null';
4940 $sqlupd .=
', instagram=null';
4941 $sqlupd .=
', snapchat=null';
4942 $sqlupd .=
', googleplus=null';
4943 $sqlupd .=
', youtube=null';
4944 $sqlupd .=
', whatsapp=null';
4945 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
4947 $resqlupd = $db->query($sqlupd);
4962 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Members').
"</b><br>\n";
4978 print
'<tr><td colspan="4">';
4979 $sql =
'SELECT rowid, socialnetworks';
4980 $sql .=
', jabberid, skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'socpeople WHERE';
4981 $sql .=
" jabberid IS NOT NULL OR jabberid <> ''";
4982 $sql .=
" OR skype IS NOT NULL OR skype <> ''";
4983 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
4984 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
4985 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
4986 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
4987 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
4988 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
4989 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
4990 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
4992 $resql = $db->query($sql);
4994 while ($obj = $db->fetch_object($resql)) {
4995 $arraysocialnetworks = array();
4996 if (!empty($obj->jabberid)) {
4997 $arraysocialnetworks[
'jabber'] = $obj->jabberid;
4999 if (!empty($obj->skype)) {
5000 $arraysocialnetworks[
'skype'] = $obj->skype;
5002 if (!empty($obj->twitter)) {
5003 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5005 if (!empty($obj->facebook)) {
5006 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5008 if (!empty($obj->linkedin)) {
5009 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5011 if (!empty($obj->instagram)) {
5012 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5014 if (!empty($obj->snapchat)) {
5015 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5017 if (!empty($obj->googleplus)) {
5018 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5020 if (!empty($obj->youtube)) {
5021 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5023 if (!empty($obj->whatsapp)) {
5024 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5026 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5027 $obj->socialnetworks =
'[]';
5029 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5030 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"socpeople SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
5031 $sqlupd .=
', jabberid=null';
5032 $sqlupd .=
', skype=null';
5033 $sqlupd .=
', twitter=null';
5034 $sqlupd .=
', facebook=null';
5035 $sqlupd .=
', linkedin=null';
5036 $sqlupd .=
', instagram=null';
5037 $sqlupd .=
', snapchat=null';
5038 $sqlupd .=
', googleplus=null';
5039 $sqlupd .=
', youtube=null';
5040 $sqlupd .=
', whatsapp=null';
5041 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5043 $resqlupd = $db->query($sqlupd);
5058 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Contacts').
"</b><br>\n";
5074 print
'<tr><td colspan="4">';
5075 $sql =
'SELECT rowid, socialnetworks';
5076 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'societe WHERE ';
5077 $sql .=
" skype IS NOT NULL OR skype <> ''";
5078 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5079 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5080 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5081 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5082 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5083 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5084 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5085 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5087 $resql = $db->query($sql);
5089 while ($obj = $db->fetch_object($resql)) {
5090 $arraysocialnetworks = array();
5091 if (!empty($obj->skype)) {
5092 $arraysocialnetworks[
'skype'] = $obj->skype;
5094 if (!empty($obj->twitter)) {
5095 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5097 if (!empty($obj->facebook)) {
5098 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5100 if (!empty($obj->linkedin)) {
5101 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5103 if (!empty($obj->instagram)) {
5104 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5106 if (!empty($obj->snapchat)) {
5107 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5109 if (!empty($obj->googleplus)) {
5110 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5112 if (!empty($obj->youtube)) {
5113 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5115 if (!empty($obj->whatsapp)) {
5116 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5118 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5119 $obj->socialnetworks =
'[]';
5121 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5122 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"societe SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
5123 $sqlupd .=
', skype=null';
5124 $sqlupd .=
', twitter=null';
5125 $sqlupd .=
', facebook=null';
5126 $sqlupd .=
', linkedin=null';
5127 $sqlupd .=
', instagram=null';
5128 $sqlupd .=
', snapchat=null';
5129 $sqlupd .=
', googleplus=null';
5130 $sqlupd .=
', youtube=null';
5131 $sqlupd .=
', whatsapp=null';
5132 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5134 $resqlupd = $db->query($sqlupd);
5149 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Thirdparties').
"</b><br>\n";
5169 print
'<tr class="trforrunsql"><td colspan="4">';
5170 $sql =
'SELECT rowid, field';
5171 if ($mode ==
'export') {
5174 $sql .=
' FROM '.MAIN_DB_PREFIX.$mode.
'_model WHERE';
5175 $sql .=
" type LIKE 'propale_%' OR type LIKE 'commande_%' OR type LIKE 'facture_%'";
5177 $resql = $db->query($sql);
5179 while ($obj = $db->fetch_object($resql)) {
5180 $oldfield = $obj->field;
5181 $newfield = str_replace(array(
',f.facnumber',
'f.facnumber,',
'f.total,',
'f.tva,'), array(
',f.ref',
'f.ref,',
'f.total_ht,',
'f.total_tva,'), $oldfield);
5183 if ($mode ==
'export') {
5184 $oldfilter = $obj->filter;
5185 $newfilter = str_replace(array(
'f.facnumber=',
'f.total=',
'f.tva='), array(
'f.ref=',
'f.total_ht=',
'f.total_tva='), $oldfilter);
5191 if ($oldfield != $newfield || $oldfilter != $newfilter) {
5192 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.$mode.
"_model SET field = '".$db->escape($newfield).
"'";
5193 if ($mode ==
'export') {
5194 $sqlupd .=
", filter = '".$db->escape($newfilter).
"'";
5196 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5197 $resultstring .=
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$sqlupd.
"</td></tr>\n";
5198 $resqlupd = $db->query($sqlupd);
5214 print
'<b>'.$langs->trans(
'MigrationImportOrExportProfiles', $mode).
"</b><br>\n";
5217 if ($resultstring) {
5218 print $resultstring;
5220 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5237 print
'<tr class="trforrunsql"><td colspan="4">';
5238 print
'<b>'.$langs->trans(
'MigrationContractLineRank').
"</b><br>\n";
5240 $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";
5241 $sql .=
" ORDER BY c.rowid,cd.rowid";
5243 $resql = $db->query($sql);
5246 $current_contract = 0;
5247 while ($obj = $db->fetch_object($resql)) {
5248 if (empty($current_contract) || $current_contract == $obj->cid) {
5254 $sqlUpd =
"UPDATE ".$db->prefix().
"contratdet SET rang=".(int) $currentRank.
" WHERE rowid=".(
int) $obj->cdid;
5255 $resultstring =
'.';
5256 print $resultstring;
5257 $resqlUpd = $db->query($sqlUpd);
5263 $current_contract = $obj->cid;
5276 if (!$resultstring) {
5277 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5292 $firstInstallVersion =
getDolGlobalString(
'MAIN_VERSION_FIRST_INSTALL', DOL_VERSION);
5293 $migrationNeeded = (
versioncompare(explode(
'.', $firstInstallVersion, 3), array(20, 0, -5)) < 0 && !$lock);
5295 print
'<tr class="trforrunsql"><td colspan="4">';
5296 print
'<b>'.$langs->trans(
'InvoiceExportModelsMigration').
"</b>: \n";
5298 if (! $migrationNeeded) {
5299 print $langs->trans(
"AlreadyDone");
5301 dolibarr_set_const($db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5308 $sql1 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_0' WHERE type = 'facture_1'";
5310 $resql1 = $db->query($sql1);
5319 $modified1 = $db->affected_rows($resql1);
5321 print str_repeat(
'.', $modified1);
5325 $sql2 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_1' WHERE type = 'facture_2'";
5327 $resql2 = $db->query($sql2);
5336 $modified2 = $db->affected_rows($resql2);
5338 print str_repeat(
'.', $modified2);
5342 if (empty($modified1 + $modified2)) {
5343 print $langs->trans(
'NothingToDo');
5348 dolibarr_set_const($db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5365 $bookKeepingAddon =
'';
5369 dolibarr_set_const($db,
'BOOKKEEPING_ADDON',
'mod_bookkeeping_neon',
'chaine', 0,
'', $entity);
5370 $bookKeepingAddon =
'mod_bookkeeping_neon';
5373 print
'<tr class="trforrunsql"><td colspan="4">';
5374 print
'<b>'.$langs->trans(
'MigrationAccountancyBookkeeping').
"</b><br>\n";
5377 if ($bookKeepingAddon ===
'mod_bookkeeping_argon') {
5380 $sql =
"SELECT DISTINCT YEAR(doc_date) as doc_year, MONTH(doc_date) as doc_month, code_journal, piece_num FROM ".$db->prefix().
"accounting_bookkeeping";
5381 $sql .=
" WHERE ref IS NULL AND entity = ".((int) $entity);
5382 $sql .=
" ORDER BY doc_year, doc_month, code_journal, piece_num";
5384 $resql = $db->query($sql);
5386 require_once DOL_DOCUMENT_ROOT .
'/accountancy/class/bookkeeping.class.php';
5389 while ($obj = $db->fetch_object($resql)) {
5390 $bookkeeping->doc_date =
dol_mktime(0, 0, 0, $obj->doc_month, 1, $obj->doc_year);
5391 $bookkeeping->code_journal = $obj->code_journal;
5392 $ref = $bookkeeping->getNextNumRef();
5394 $sqlUpd =
"UPDATE ".$db->prefix().
"accounting_bookkeeping SET ref = '".$db->escape($ref).
"' WHERE piece_num = '".$db->escape($obj->piece_num).
"' AND entity = ".((int) $entity);
5395 $resultstring =
'.';
5396 print $resultstring;
5397 $resqlUpd = $db->query($sqlUpd);
5416 if (!$resultstring) {
5417 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
run_sql($sqlfile, $silent=1, $entity=0, $usesavepoint=1, $handler='', $okerror='default', $linelengthlimit=32768, $nocommentremoval=0, $offsetforchartofaccount=0, $colspan=0, $onlysqltoimportwebsite=0, $database='')
Launch a sql file.
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
versioncompare($versionarray1, $versionarray2)
Compare 2 versions (stored into 2 arrays), 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.
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_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...
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
getDoliDBInstance($type, $host, $user, $pass, $name, $port)
Return a DoliDB instance (database handler).
pHeader($subtitle, $next, $action='set', $param='', $forcejqueryurl='', $csstable='main-inside')
Show HTML header of install pages.
pFooter($nonext=0, $setuplang='', $jscheckfunction='', $withpleasewait=0, $morehtml='')
Print HTML footer of install pages.
dolibarr_install_syslog($message, $level=LOG_DEBUG)
Log function for install pages.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocaltax1_rate, $uselocaltax2_rate, $remise_percent_global, $price_base_type, $info_bits, $type, $seller=null, $localtaxes_array=[], $progress=100, $multicurrency_tx=1, $pu_devise=0, $multicurrency_code='')
Calculate totals (net, vat, ...) of a line.
dol_decode($chain, $key='1')
Decode a base 64 encoded + specific delta change.
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_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_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.