Fix: Upgrade process must never use DDL instructions, except Drop colum or table. Create/Update must be done in migrate sql.
This commit is contained in:
parent
0519e52a66
commit
95f44eb1bc
@ -6,6 +6,7 @@
|
|||||||
-- when current version is 2.8.0 or higher.
|
-- when current version is 2.8.0 or higher.
|
||||||
--
|
--
|
||||||
|
|
||||||
|
|
||||||
-- rename llx_product_det
|
-- rename llx_product_det
|
||||||
ALTER TABLE llx_product_det RENAME TO llx_product_lang;
|
ALTER TABLE llx_product_det RENAME TO llx_product_lang;
|
||||||
ALTER TABLE llx_product_lang ADD UNIQUE INDEX uk_product_lang (fk_product, lang);
|
ALTER TABLE llx_product_lang ADD UNIQUE INDEX uk_product_lang (fk_product, lang);
|
||||||
@ -92,6 +93,9 @@ alter table llx_product add column accountancy_code_buy varchar(15) aft
|
|||||||
ALTER TABLE llx_product drop column stock_loc;
|
ALTER TABLE llx_product drop column stock_loc;
|
||||||
ALTER TABLE llx_product_stock add column location varchar(32);
|
ALTER TABLE llx_product_stock add column location varchar(32);
|
||||||
|
|
||||||
|
ALTER TABLE llx_expedition ADD COLUMN ref_customer varchar(30) AFTER entity;
|
||||||
|
ALTER TABLE llx_expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition;
|
||||||
|
|
||||||
ALTER TABLE llx_facture MODIFY tva double(24,8) DEFAULT 0;
|
ALTER TABLE llx_facture MODIFY tva double(24,8) DEFAULT 0;
|
||||||
ALTER TABLE llx_facture MODIFY total double(24,8) DEFAULT 0;
|
ALTER TABLE llx_facture MODIFY total double(24,8) DEFAULT 0;
|
||||||
ALTER TABLE llx_facture MODIFY total_ttc double(24,8) DEFAULT 0;
|
ALTER TABLE llx_facture MODIFY total_ttc double(24,8) DEFAULT 0;
|
||||||
|
|||||||
@ -273,11 +273,11 @@ if (isset($_POST['action']) && preg_match('/upgrade/i',$_POST["action"]))
|
|||||||
if (versioncompare($versiontoarray,$afterversionarray) >= 0 && versioncompare($versiontoarray,$beforeversionarray) <= 0)
|
if (versioncompare($versiontoarray,$afterversionarray) >= 0 && versioncompare($versiontoarray,$beforeversionarray) <= 0)
|
||||||
{
|
{
|
||||||
migrate_project_task_time($db,$langs,$conf);
|
migrate_project_task_time($db,$langs,$conf);
|
||||||
|
|
||||||
migrate_customerorder_shipping($db,$langs,$conf);
|
migrate_customerorder_shipping($db,$langs,$conf);
|
||||||
|
|
||||||
migrate_shipping_delivery($db,$langs,$conf);
|
migrate_shipping_delivery($db,$langs,$conf);
|
||||||
|
|
||||||
migrate_shipping_delivery2($db,$langs,$conf);
|
migrate_shipping_delivery2($db,$langs,$conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -411,6 +411,7 @@ function migrate_paiements_orphelins_1($db,$langs,$conf)
|
|||||||
$sql.= " WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid";
|
$sql.= " WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid";
|
||||||
$sql.= " AND b.rappro = 1";
|
$sql.= " AND b.rappro = 1";
|
||||||
$sql.= " AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
|
$sql.= " AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
|
||||||
|
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
|
|
||||||
dolibarr_install_syslog("upgrade2::migrate_paiements_orphelins_1 sql=".$sql);
|
dolibarr_install_syslog("upgrade2::migrate_paiements_orphelins_1 sql=".$sql);
|
||||||
@ -1513,14 +1514,14 @@ function migrate_price_commande($db,$langs,$conf)
|
|||||||
$db->free($resql);
|
$db->free($resql);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."commandedet";
|
$sql = "DELETE FROM ".MAIN_DB_PREFIX."commandedet";
|
||||||
$sql.= " WHERE price = 0 and total_ttc = 0 and total_tva = 0 and total_ht = 0 AND remise_percent = 0";
|
$sql.= " WHERE price = 0 and total_ttc = 0 and total_tva = 0 and total_ht = 0 AND remise_percent = 0";
|
||||||
$resql=$db->query($sql);
|
$resql=$db->query($sql);
|
||||||
if (! $resql)
|
if (! $resql)
|
||||||
{
|
{
|
||||||
dol_print_error($db);
|
dol_print_error($db);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$db->commit();
|
$db->commit();
|
||||||
}
|
}
|
||||||
@ -1625,14 +1626,14 @@ function migrate_price_commande_fournisseur($db,$langs,$conf)
|
|||||||
$db->free($resql);
|
$db->free($resql);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseurdet";
|
$sql = "DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseurdet";
|
||||||
$sql.= " WHERE subprice = 0 and total_ttc = 0 and total_tva = 0 and total_ht = 0";
|
$sql.= " WHERE subprice = 0 and total_ttc = 0 and total_tva = 0 and total_ht = 0";
|
||||||
$resql=$db->query($sql);
|
$resql=$db->query($sql);
|
||||||
if (! $resql)
|
if (! $resql)
|
||||||
{
|
{
|
||||||
dol_print_error($db);
|
dol_print_error($db);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$db->commit();
|
$db->commit();
|
||||||
}
|
}
|
||||||
@ -2856,10 +2857,10 @@ function migrate_customerorder_shipping($db,$langs,$conf)
|
|||||||
dolibarr_install_syslog("upgrade2::migrate_customerorder_shipping");
|
dolibarr_install_syslog("upgrade2::migrate_customerorder_shipping");
|
||||||
|
|
||||||
$db->begin();
|
$db->begin();
|
||||||
|
|
||||||
$sqlAdd1 = "ALTER TABLE ".MAIN_DB_PREFIX."expedition ADD COLUMN ref_customer varchar(30) AFTER entity";
|
$sqlAdd1 = "ALTER TABLE ".MAIN_DB_PREFIX."expedition ADD COLUMN ref_customer varchar(30) AFTER entity";
|
||||||
$sqlAdd2 = "ALTER TABLE ".MAIN_DB_PREFIX."expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition";
|
$sqlAdd2 = "ALTER TABLE ".MAIN_DB_PREFIX."expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition";
|
||||||
|
|
||||||
if ($db->query($sqlAdd1) && $db->query($sqlAdd2))
|
if ($db->query($sqlAdd1) && $db->query($sqlAdd2))
|
||||||
{
|
{
|
||||||
$sqlSelect = "SELECT e.rowid as shipping_id, c.ref_client, c.date_livraison";
|
$sqlSelect = "SELECT e.rowid as shipping_id, c.ref_client, c.date_livraison";
|
||||||
@ -2868,13 +2869,13 @@ function migrate_customerorder_shipping($db,$langs,$conf)
|
|||||||
$sqlSelect.= " LEFT JOIN ".MAIN_DB_PREFIX."commande as c ON c.rowid = el.fk_source AND el.sourcetype = 'commande'";
|
$sqlSelect.= " LEFT JOIN ".MAIN_DB_PREFIX."commande as c ON c.rowid = el.fk_source AND el.sourcetype = 'commande'";
|
||||||
$sqlSelect.= " WHERE e.rowid = el.fk_target";
|
$sqlSelect.= " WHERE e.rowid = el.fk_target";
|
||||||
$sqlSelect.= " AND el.targettype = 'shipping'";
|
$sqlSelect.= " AND el.targettype = 'shipping'";
|
||||||
|
|
||||||
$resql = $db->query($sqlSelect);
|
$resql = $db->query($sqlSelect);
|
||||||
if ($resql)
|
if ($resql)
|
||||||
{
|
{
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$num = $db->num_rows($resql);
|
$num = $db->num_rows($resql);
|
||||||
|
|
||||||
if ($num)
|
if ($num)
|
||||||
{
|
{
|
||||||
while ($i < $num)
|
while ($i < $num)
|
||||||
@ -2885,7 +2886,7 @@ function migrate_customerorder_shipping($db,$langs,$conf)
|
|||||||
$sqlUpdate.= " ref_customer = '".$obj->ref_client."'";
|
$sqlUpdate.= " ref_customer = '".$obj->ref_client."'";
|
||||||
$sqlUpdate.= ", date_delivery = '".($obj->date_livraison?$obj->date_livraison:'null')."'";
|
$sqlUpdate.= ", date_delivery = '".($obj->date_livraison?$obj->date_livraison:'null')."'";
|
||||||
$sqlUpdate.= " WHERE rowid = ".$obj->shipping_id;
|
$sqlUpdate.= " WHERE rowid = ".$obj->shipping_id;
|
||||||
|
|
||||||
$result=$db->query($sqlUpdate);
|
$result=$db->query($sqlUpdate);
|
||||||
if (! $result)
|
if (! $result)
|
||||||
{
|
{
|
||||||
@ -2900,7 +2901,7 @@ function migrate_customerorder_shipping($db,$langs,$conf)
|
|||||||
{
|
{
|
||||||
print $langs->trans('AlreadyDone')."<br>\n";
|
print $langs->trans('AlreadyDone')."<br>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($error == 0)
|
if ($error == 0)
|
||||||
{
|
{
|
||||||
$db->commit();
|
$db->commit();
|
||||||
@ -2932,7 +2933,7 @@ function migrate_customerorder_shipping($db,$langs,$conf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Migrate fk_expedition to llx_element_element
|
* Migrate link stored into fk_expedition into llx_element_element
|
||||||
*/
|
*/
|
||||||
function migrate_shipping_delivery($db,$langs,$conf)
|
function migrate_shipping_delivery($db,$langs,$conf)
|
||||||
{
|
{
|
||||||
@ -2953,6 +2954,7 @@ function migrate_shipping_delivery($db,$langs,$conf)
|
|||||||
|
|
||||||
$sqlSelect = "SELECT rowid, fk_expedition";
|
$sqlSelect = "SELECT rowid, fk_expedition";
|
||||||
$sqlSelect.= " FROM ".MAIN_DB_PREFIX."livraison";
|
$sqlSelect.= " FROM ".MAIN_DB_PREFIX."livraison";
|
||||||
|
$sqlSelect.= " WHERE fk_expedition is not null";
|
||||||
|
|
||||||
$resql = $db->query($sqlSelect);
|
$resql = $db->query($sqlSelect);
|
||||||
if ($resql)
|
if ($resql)
|
||||||
@ -2979,12 +2981,24 @@ function migrate_shipping_delivery($db,$langs,$conf)
|
|||||||
$sqlInsert.= ")";
|
$sqlInsert.= ")";
|
||||||
|
|
||||||
$result=$db->query($sqlInsert);
|
$result=$db->query($sqlInsert);
|
||||||
if (! $result)
|
if ($result)
|
||||||
|
{
|
||||||
|
$sqlUpdate = "UPDATE ".MAIN_DB_PREFIX."livraison SET fk_expedition = NULL";
|
||||||
|
$sqlUpdate.= " WHERE rowid = ".$obj->rowid;
|
||||||
|
|
||||||
|
$result=$db->query($sqlUpdate);
|
||||||
|
if (! $result)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
print ".";
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
$error++;
|
$error++;
|
||||||
dol_print_error($db);
|
dol_print_error($db);
|
||||||
}
|
}
|
||||||
print ". ";
|
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2995,17 +3009,14 @@ function migrate_shipping_delivery($db,$langs,$conf)
|
|||||||
|
|
||||||
if ($error == 0)
|
if ($error == 0)
|
||||||
{
|
{
|
||||||
$sqlDrop = "ALTER TABLE ".MAIN_DB_PREFIX."livraison DROP COLUMN fk_expedition";
|
|
||||||
$sqlDelete = "DELETE FROM ".MAIN_DB_PREFIX."element_element WHERE sourcetype = 'commande' AND targettype = 'delivery'";
|
$sqlDelete = "DELETE FROM ".MAIN_DB_PREFIX."element_element WHERE sourcetype = 'commande' AND targettype = 'delivery'";
|
||||||
if ($db->query($sqlDrop) && $db->query($sqlDelete))
|
$db->query($sqlDelete);
|
||||||
{
|
|
||||||
$db->commit();
|
$db->commit();
|
||||||
}
|
|
||||||
else
|
// DDL commands must not be inside a transaction
|
||||||
{
|
$sqlDrop = "ALTER TABLE ".MAIN_DB_PREFIX."livraison DROP COLUMN fk_expedition";
|
||||||
dol_print_error($db);
|
$db->query($sqlDrop);
|
||||||
$db->rollback();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3039,77 +3050,69 @@ function migrate_shipping_delivery2($db,$langs,$conf)
|
|||||||
|
|
||||||
$error = 0;
|
$error = 0;
|
||||||
|
|
||||||
$result1 = $db->DDLDescTable(MAIN_DB_PREFIX."livraison","ref_customer");
|
/* $result1 = $db->DDLDescTable(MAIN_DB_PREFIX."livraison","ref_customer");
|
||||||
$result2 = $db->DDLDescTable(MAIN_DB_PREFIX."livraison","date_delivery");
|
$result2 = $db->DDLDescTable(MAIN_DB_PREFIX."livraison","date_delivery");
|
||||||
$obj1 = $db->fetch_object($result1);
|
$obj1 = $db->fetch_object($result1);
|
||||||
$obj2 = $db->fetch_object($result2);
|
$obj2 = $db->fetch_object($result2);
|
||||||
if (!$obj1 && !$obj2)
|
if (!$obj1 && !$obj2)
|
||||||
{
|
{*/
|
||||||
dolibarr_install_syslog("upgrade2::migrate_shipping_delivery2");
|
dolibarr_install_syslog("upgrade2::migrate_shipping_delivery2");
|
||||||
|
|
||||||
$db->begin();
|
$db->begin();
|
||||||
|
|
||||||
$sqlAdd1 = "ALTER TABLE ".MAIN_DB_PREFIX."livraison CHANGE ref_client ref_customer varchar(30)";
|
/* $sqlAdd1 = "ALTER TABLE ".MAIN_DB_PREFIX."livraison CHANGE ref_client ref_customer varchar(30)";
|
||||||
$sqlAdd2 = "ALTER TABLE ".MAIN_DB_PREFIX."livraison CHANGE date_livraison date_delivery date DEFAULT NULL";
|
$sqlAdd2 = "ALTER TABLE ".MAIN_DB_PREFIX."livraison CHANGE date_livraison date_delivery date DEFAULT NULL";
|
||||||
|
|
||||||
if ($db->query($sqlAdd1) && $db->query($sqlAdd2))
|
|
||||||
{
|
|
||||||
$sqlSelect = "SELECT l.rowid as delivery_id, e.ref_customer, e.date_delivery";
|
|
||||||
$sqlSelect.= " FROM ".MAIN_DB_PREFIX."livraison as l";
|
|
||||||
$sqlSelect.= ", ".MAIN_DB_PREFIX."element_element as el";
|
|
||||||
$sqlSelect.= " LEFT JOIN ".MAIN_DB_PREFIX."expedition as e ON e.rowid = el.fk_source AND el.sourcetype = 'shipping'";
|
|
||||||
$sqlSelect.= " WHERE l.rowid = el.fk_target";
|
|
||||||
$sqlSelect.= " AND el.targettype = 'delivery'";
|
|
||||||
|
|
||||||
$resql = $db->query($sqlSelect);
|
|
||||||
if ($resql)
|
|
||||||
{
|
|
||||||
$i = 0;
|
|
||||||
$num = $db->num_rows($resql);
|
|
||||||
|
|
||||||
if ($num)
|
|
||||||
{
|
|
||||||
while ($i < $num)
|
|
||||||
{
|
|
||||||
$obj = $db->fetch_object($resql);
|
|
||||||
|
|
||||||
$sqlUpdate = "UPDATE ".MAIN_DB_PREFIX."livraison SET";
|
if ($db->query($sqlAdd1) && $db->query($sqlAdd2))
|
||||||
$sqlUpdate.= " ref_customer = '".$obj->ref_customer."'";
|
{*/
|
||||||
$sqlUpdate.= ", date_delivery = '".($obj->date_delivery?$obj->date_delivery:'null')."'";
|
$sqlSelect = "SELECT l.rowid as delivery_id, e.ref_customer, e.date_delivery";
|
||||||
$sqlUpdate.= " WHERE rowid = ".$obj->delivery_id;
|
$sqlSelect.= " FROM ".MAIN_DB_PREFIX."livraison as l,";
|
||||||
|
$sqlSelect.= " ".MAIN_DB_PREFIX."element_element as el,";
|
||||||
$result=$db->query($sqlUpdate);
|
$sqlSelect.= " ".MAIN_DB_PREFIX."expedition as e";
|
||||||
if (! $result)
|
$sqlSelect.= " WHERE l.rowid = el.fk_target";
|
||||||
{
|
$sqlSelect.= " AND el.targettype = 'delivery'";
|
||||||
$error++;
|
$sqlSelect.= " AND e.rowid = el.fk_source AND el.sourcetype = 'shipping'";
|
||||||
dol_print_error($db);
|
// Add condition to know if we never migrate this record
|
||||||
}
|
$sqlSelect.= " AND (l.ref_customer IS NULL or l.ref_customer = '')";
|
||||||
print ". ";
|
$sqlSelect.= " AND (l.date_delivery IS NULL or l.date_delivery = '')";
|
||||||
$i++;
|
|
||||||
}
|
$resql = $db->query($sqlSelect);
|
||||||
}
|
if ($resql)
|
||||||
else
|
{
|
||||||
{
|
$i = 0;
|
||||||
print $langs->trans('AlreadyDone')."<br>\n";
|
$num = $db->num_rows($resql);
|
||||||
}
|
|
||||||
|
if ($num)
|
||||||
if ($error == 0)
|
{
|
||||||
{
|
while ($i < $num)
|
||||||
$db->commit();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dol_print_error($db);
|
|
||||||
$db->rollback();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
dol_print_error($db);
|
$obj = $db->fetch_object($resql);
|
||||||
$db->rollback();
|
|
||||||
|
$sqlUpdate = "UPDATE ".MAIN_DB_PREFIX."livraison SET";
|
||||||
|
$sqlUpdate.= " ref_customer = '".$obj->ref_customer."',";
|
||||||
|
$sqlUpdate.= " date_delivery = '".($obj->date_delivery?$obj->date_delivery:'null')."'";
|
||||||
|
$sqlUpdate.= " WHERE rowid = ".$obj->delivery_id;
|
||||||
|
|
||||||
|
$result=$db->query($sqlUpdate);
|
||||||
|
if (! $result)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
print ". ";
|
||||||
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
print $langs->trans('AlreadyDone')."<br>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($error == 0)
|
||||||
|
{
|
||||||
|
$db->commit();
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
dol_print_error($db);
|
dol_print_error($db);
|
||||||
$db->rollback();
|
$db->rollback();
|
||||||
@ -3117,12 +3120,26 @@ function migrate_shipping_delivery2($db,$langs,$conf)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print $langs->trans('AlreadyDone')."<br>\n";
|
dol_print_error($db);
|
||||||
|
$db->rollback();
|
||||||
}
|
}
|
||||||
|
/* }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
$db->rollback();
|
||||||
|
}*/
|
||||||
|
/* }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print $langs->trans('AlreadyDone')."<br>\n";
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Migration directory
|
* Migration directory
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user