From e92ab7327df41fbaeb76fb44ddbb79b3349d19a9 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Thu, 8 Dec 2011 11:11:22 +0100 Subject: [PATCH] Fix: migration payment mode --- htdocs/install/upgrade2.php | 184 +++++++++++++++++++++++--------- htdocs/langs/en_US/install.lang | 5 +- htdocs/langs/fr_FR/install.lang | 3 + 3 files changed, 143 insertions(+), 49 deletions(-) diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index de78ffcc49f..aaa4fd521dd 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -308,6 +308,8 @@ if (! GETPOST("action") || preg_match('/upgrade/i',GETPOST('action'))) $beforeversionarray=explode('.','3.2.9'); if (versioncompare($versiontoarray,$afterversionarray) >= 0 && versioncompare($versiontoarray,$beforeversionarray) <= 0) { + migrate_mode_reglement($db,$langs,$conf); + // Reload modules migrate_reload_modules($db,$langs,$conf); @@ -3085,59 +3087,145 @@ function migrate_shipping_delivery2($db,$langs,$conf) */ function migrate_actioncomm_element($db,$langs,$conf) { - print ''; + print ''; + + print '
'; + print ''.$langs->trans('MigrationActioncommElement')."
\n"; + + $elements = array( + 'propal' => 'propalrowid', + 'order' => 'fk_commande', + 'invoice' => 'fk_facture', + 'contract' => 'fk_contract', + 'order_supplier' => 'fk_supplier_order', + 'invoice_supplier' => 'fk_supplier_invoice' + ); + + foreach($elements as $type => $field) + { + $result = $db->DDLDescTable(MAIN_DB_PREFIX."actioncomm",$field); + $obj = $db->fetch_object($result); + if ($obj) + { + dolibarr_install_syslog("upgrade2::migrate_actioncomm_element field=".$field); + + $db->begin(); + + $sql = "UPDATE ".MAIN_DB_PREFIX."actioncomm SET "; + $sql.= "fk_element = ".$field.", elementtype = '".$type."'"; + $sql.= " WHERE ".$field." IS NOT NULL"; + $sql.= " AND fk_element IS NULL"; + $sql.= " AND elementtype IS NULL"; + + $resql = $db->query($sql); + if ($resql) + { + $db->commit(); + + // DDL commands must not be inside a transaction + // We will drop at next version because a migrate should be runnable several times if it fails. + //$sqlDrop = "ALTER TABLE ".MAIN_DB_PREFIX."actioncomm DROP COLUMN ".$field; + //$db->query($sqlDrop); + //print ". "; + } + else + { + dol_print_error($db); + $db->rollback(); + } + } + else + { + print $langs->trans('AlreadyDone')."
\n"; + } + } + + print ''; +} - print '
'; - print ''.$langs->trans('MigrationActioncommElement')."
\n"; +/* + * Migrate link stored into fk_mode_reglement + */ +function migrate_mode_reglement($db,$langs,$conf) +{ + print ''; + + print '
'; + print ''.$langs->trans('MigrationPaymentMode')."
\n"; + + $elements = array( + 'old_id' => array(5,8,9,10,11), + 'new_id' => array(50,51,52,53,54), + 'code' => array('VAD','TRA','LCR','FAC','PRO'), + 'tables' => array('commande_fournisseur','commande','facture_rec','facture','propal') + ); + + foreach($elements['old_id'] as $key => $old_id) + { + $error=0; + + dolibarr_install_syslog("upgrade2::migrate_mode_reglement code=".$elements['code'][$key]); + + $sqlSelect = "SELECT id"; + $sqlSelect.= " FROM ".MAIN_DB_PREFIX."c_paiement"; + $sqlSelect.= " WHERE id = ".$old_id; + $sqlSelect.= " AND code = '".$elements['code'][$key]."'"; - $elements = array( 'propal' => 'propalrowid', - 'order' => 'fk_commande', - 'invoice' => 'fk_facture', - 'contract' => 'fk_contract', - 'order_supplier' => 'fk_supplier_order', - 'invoice_supplier' => 'fk_supplier_invoice' - ); + $resql = $db->query($sqlSelect); + if ($resql) + { + $num = $db->num_rows($resql); + if ($num) + { + $db->begin(); + + $sql = "UPDATE ".MAIN_DB_PREFIX."c_paiement SET "; + $sql.= "id = ".$elements['new_id'][$key]; + $sql.= " WHERE id = ".$old_id; + $sql.= " AND code = '".$elements['code'][$key]."'"; - foreach($elements as $type => $field) + $resql = $db->query($sql); + if ($resql) + { + foreach($elements['tables'] as $table) + { + $sql = "UPDATE ".MAIN_DB_PREFIX.$table." SET "; + $sql.= "fk_mode_reglement = ".$elements['new_id'][$key]; + $sql.= " WHERE fk_mode_reglement = ".$old_id; + + $resql = $db->query($sql); + if (! $resql) { - $result = $db->DDLDescTable(MAIN_DB_PREFIX."actioncomm",$field); - $obj = $db->fetch_object($result); - if ($obj) - { - dolibarr_install_syslog("upgrade2::migrate_actioncomm_element field=".$field); - - $db->begin(); - - $sql = "UPDATE ".MAIN_DB_PREFIX."actioncomm SET "; - $sql.= "fk_element = ".$field.", elementtype = '".$type."'"; - $sql.= " WHERE ".$field." IS NOT NULL"; - $sql.= " AND fk_element IS NULL"; - $sql.= " AND elementtype IS NULL"; - - $resql = $db->query($sql); - if ($resql) - { - $db->commit(); - - // DDL commands must not be inside a transaction - // We will drop at next version because a migrate should be runnable several times if it fails. - //$sqlDrop = "ALTER TABLE ".MAIN_DB_PREFIX."actioncomm DROP COLUMN ".$field; - //$db->query($sqlDrop); - //print ". "; - } - else - { - dol_print_error($db); - $db->rollback(); - } - } - else - { - print $langs->trans('AlreadyDone')."
\n"; - } + dol_print_error($db); + $error++; } - - print ''; + print ". "; + } + + if (! $error) + { + $db->commit(); + } + else + { + dol_print_error($db); + $db->rollback(); + } + } + else + { + dol_print_error($db); + $db->rollback(); + } + } + else + { + print $langs->trans('AlreadyDone')."
\n"; + } + } + } + + print ''; } diff --git a/htdocs/langs/en_US/install.lang b/htdocs/langs/en_US/install.lang index 700f4750687..f40d500f2cf 100644 --- a/htdocs/langs/en_US/install.lang +++ b/htdocs/langs/en_US/install.lang @@ -232,4 +232,7 @@ MigrationProjectUserResp=Data migration field fk_user_resp of llx_projet to llx_ MigrationProjectTaskTime=Update time spent in seconds # Migration Acctioncom -MigrationActioncommElement=Update data on actions \ No newline at end of file +MigrationActioncommElement=Update data on actions + +# Migration payment mode +MigrationPaymentMode=Data migration for payment mode \ No newline at end of file diff --git a/htdocs/langs/fr_FR/install.lang b/htdocs/langs/fr_FR/install.lang index 55872123ef4..8c772dc390f 100644 --- a/htdocs/langs/fr_FR/install.lang +++ b/htdocs/langs/fr_FR/install.lang @@ -236,3 +236,6 @@ MigrationProjectTaskTime=Mise à jour du temps consommé en secondes # Migration Acctioncom MigrationActioncommElement=Mise à jour des données des actions des éléments + +# Migration payment mode +MigrationPaymentMode=Migration des modes de paiement