diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php
index ee8c44e6d72..592e631c55b 100644
--- a/htdocs/install/upgrade2.php
+++ b/htdocs/install/upgrade2.php
@@ -262,62 +262,73 @@ function migrate_paiements($db,$langs,$conf)
print '
';
print ''.$langs->trans('MigrationPaymentsUpdate')."
\n";
-
- $sql = "SELECT p.rowid, p.fk_facture, p.amount";
- $sql .= " FROM ".MAIN_DB_PREFIX."paiement as p";
- $sql .= " WHERE p.fk_facture > 0";
- $resql = $db->query($sql);
-
- dolibarr_install_syslog("upgrade2::migrate_paiements sql=".$sql);
- if ($resql)
+
+ $result = $db->DDLDescTable(MAIN_DB_PREFIX."paiement","fk_facture");
+ $obj = $db->fetch_object($result);
+ if ($obj)
{
- $i = 0;
- $row = array();
- $num = $db->num_rows($resql);
-
- while ($i < $num)
+ $sql = "SELECT p.rowid, p.fk_facture, p.amount";
+ $sql .= " FROM ".MAIN_DB_PREFIX."paiement as p";
+ $sql .= " WHERE p.fk_facture > 0";
+
+ $resql = $db->query($sql);
+
+ dolibarr_install_syslog("upgrade2::migrate_paiements sql=".$sql);
+ if ($resql)
{
- $obj = $db->fetch_object($resql);
- $row[$i][0] = $obj->rowid ;
- $row[$i][1] = $obj->fk_facture;
- $row[$i][2] = $obj->amount;
- $i++;
- }
- }
- else {
- dol_print_error($db);
- }
-
- if ($num)
- {
- print $langs->trans('MigrationPaymentsNumberToUpdate', $num)."
\n";
- if ($db->begin())
- {
- $res = 0;
- for ($i = 0 ; $i < sizeof($row) ; $i++)
+ $i = 0;
+ $row = array();
+ $num = $db->num_rows($resql);
+
+ while ($i < $num)
{
- $sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement_facture (fk_facture, fk_paiement, amount)";
- $sql .= " VALUES (".$row[$i][1].",".$row[$i][0].",".$row[$i][2].")";
-
- $res += $db->query($sql);
-
- $sql = "UPDATE ".MAIN_DB_PREFIX."paiement SET fk_facture = 0 WHERE rowid = ".$row[$i][0];
-
- $res += $db->query($sql);
-
- print $langs->trans('MigrationProcessPaymentUpdate', $row[$i][0])."
\n";
+ $obj = $db->fetch_object($resql);
+ $row[$i][0] = $obj->rowid ;
+ $row[$i][1] = $obj->fk_facture;
+ $row[$i][2] = $obj->amount;
+ $i++;
}
}
-
- if ($res == (2 * sizeof($row)))
- {
- $db->commit();
- print $langs->trans('MigrationSuccessfullUpdate')."
";
- }
else
{
- $db->rollback();
- print $langs->trans('MigrationUpdateFailed').'
';
+ dol_print_error($db);
+ }
+
+ if ($num)
+ {
+ print $langs->trans('MigrationPaymentsNumberToUpdate', $num)."
\n";
+ if ($db->begin())
+ {
+ $res = 0;
+ for ($i = 0 ; $i < sizeof($row) ; $i++)
+ {
+ $sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement_facture (fk_facture, fk_paiement, amount)";
+ $sql.= " VALUES (".$row[$i][1].",".$row[$i][0].",".$row[$i][2].")";
+
+ $res += $db->query($sql);
+
+ $sql = "UPDATE ".MAIN_DB_PREFIX."paiement SET fk_facture = 0 WHERE rowid = ".$row[$i][0];
+
+ $res += $db->query($sql);
+
+ print $langs->trans('MigrationProcessPaymentUpdate', $row[$i][0])."
\n";
+ }
+ }
+
+ if ($res == (2 * sizeof($row)))
+ {
+ $db->commit();
+ print $langs->trans('MigrationSuccessfullUpdate')."
";
+ }
+ else
+ {
+ $db->rollback();
+ print $langs->trans('MigrationUpdateFailed').'
';
+ }
+ }
+ else
+ {
+ print $langs->trans('MigrationPaymentsNothingToUpdate')."
\n";
}
}
else
@@ -340,95 +351,106 @@ function migrate_paiements_orphelins_1($db,$langs,$conf)
print '
';
print ''.$langs->trans('MigrationPaymentsUpdate')."
\n";
-
- // Tous les enregistrements qui sortent de cette requete devrait avoir un pere dans llx_paiement_facture
- $sql = "SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
- $sql.= " bu2.url_id as socid";
- $sql.= " FROM (".MAIN_DB_PREFIX."paiement as p, ".MAIN_DB_PREFIX."bank_url as bu, ".MAIN_DB_PREFIX."bank as b)";
- $sql.= " left join llx_paiement_facture as pf on pf.fk_paiement=p.rowid";
- $sql.= " left join llx_bank_url as bu2 on (bu.fk_bank=bu2.fk_bank AND bu2.type='company')";
- $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 (p.fk_facture = 0 OR p.fk_facture IS NULL)";
- $resql = $db->query($sql);
-
- dolibarr_install_syslog("upgrade2::migrate_paiements_orphelins_1 sql=".$sql);
- $row = array();
- if ($resql)
+
+ $result = $db->DDLDescTable(MAIN_DB_PREFIX."paiement","fk_facture");
+ $obj = $db->fetch_object($result);
+ if ($obj)
{
- $i = $j = 0;
- $num = $db->num_rows($resql);
-
- while ($i < $num)
+ // Tous les enregistrements qui sortent de cette requete devrait avoir un pere dans llx_paiement_facture
+ $sql = "SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
+ $sql.= " bu2.url_id as socid";
+ $sql.= " FROM (".MAIN_DB_PREFIX."paiement as p, ".MAIN_DB_PREFIX."bank_url as bu, ".MAIN_DB_PREFIX."bank as b)";
+ $sql.= " LEFT JOIN llx_paiement_facture as pf ON pf.fk_paiement = p.rowid";
+ $sql.= " LEFT JOIN llx_bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')";
+ $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 (p.fk_facture = 0 OR p.fk_facture IS NULL)";
+ $resql = $db->query($sql);
+
+ dolibarr_install_syslog("upgrade2::migrate_paiements_orphelins_1 sql=".$sql);
+ $row = array();
+ if ($resql)
{
- $obj = $db->fetch_object($resql);
- if ($obj->pamount == $obj->bamount && $obj->socid) // Pour etre sur d'avoir bon cas
+ $i = $j = 0;
+ $num = $db->num_rows($resql);
+
+ while ($i < $num)
{
- $row[$j]['paymentid'] = $obj->rowid ; // paymentid
- $row[$j]['pamount'] = $obj->pamount;
- $row[$j]['fk_bank'] = $obj->fk_bank;
- $row[$j]['bamount'] = $obj->bamount;
- $row[$j]['socid'] = $obj->socid;
- $row[$j]['datec'] = $obj->datec;
- $j++;
- }
- $i++;
- }
- }
- else {
- dol_print_error($db);
- }
-
- if (sizeof($row))
- {
- print $langs->trans('OrphelinsPaymentsDetectedByMethod', 1).': '.sizeof($row)."
\n";
- $db->begin();
-
- $res = 0;
- for ($i = 0 ; $i < sizeof($row) ; $i++)
- {
- if ($conf->global->MAIN_FEATURES_LEVEL == 2) 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'].'
';
-
- // On cherche facture sans lien paiement et du meme montant et pour meme societe.
- $sql=" SELECT distinct f.rowid from ".MAIN_DB_PREFIX."facture as f";
- $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid = pf.fk_facture";
- $sql.=" WHERE f.fk_statut in (2,3) AND fk_soc = ".$row[$i]['socid']." AND total_ttc = ".$row[$i]['pamount'];
- $sql.=" AND pf.fk_facture IS NULL";
- $sql.=" ORDER BY f.fk_statut";
- //print $sql.'
';
- $resql=$db->query($sql);
- if ($resql)
- {
- $num = $db->num_rows($resql);
- //print 'Nb of invoice found for this amount and company :'.$num.'
';
- if ($num >= 1)
+ $obj = $db->fetch_object($resql);
+ if ($obj->pamount == $obj->bamount && $obj->socid) // Pour etre sur d'avoir bon cas
{
- $obj=$db->fetch_object($resql);
- $facid=$obj->rowid;
-
- $sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement_facture (fk_facture, fk_paiement, amount)";
- $sql .= " VALUES (".$facid.",".$row[$i]['paymentid'].",".$row[$i]['pamount'].")";
- $res += $db->query($sql);
-
- print $langs->trans('MigrationProcessPaymentUpdate', 'facid='.$facid.'-paymentid='.$row[$i]['paymentid'].'-amount='.$row[$i]['pamount'])."
\n";
+ $row[$j]['paymentid'] = $obj->rowid ; // paymentid
+ $row[$j]['pamount'] = $obj->pamount;
+ $row[$j]['fk_bank'] = $obj->fk_bank;
+ $row[$j]['bamount'] = $obj->bamount;
+ $row[$j]['socid'] = $obj->socid;
+ $row[$j]['datec'] = $obj->datec;
+ $j++;
}
+ $i++;
+ }
+ }
+ else
+ {
+ dol_print_error($db);
+ }
+
+ if (sizeof($row))
+ {
+ print $langs->trans('OrphelinsPaymentsDetectedByMethod', 1).': '.sizeof($row)."
\n";
+ $db->begin();
+
+ $res = 0;
+ for ($i = 0 ; $i < sizeof($row) ; $i++)
+ {
+ if ($conf->global->MAIN_FEATURES_LEVEL == 2) 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'].'
';
+
+ // On cherche facture sans lien paiement et du meme montant et pour meme societe.
+ $sql=" SELECT distinct f.rowid from ".MAIN_DB_PREFIX."facture as f";
+ $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid = pf.fk_facture";
+ $sql.=" WHERE f.fk_statut in (2,3) AND fk_soc = ".$row[$i]['socid']." AND total_ttc = ".$row[$i]['pamount'];
+ $sql.=" AND pf.fk_facture IS NULL";
+ $sql.=" ORDER BY f.fk_statut";
+ //print $sql.'
';
+ $resql=$db->query($sql);
+ if ($resql)
+ {
+ $num = $db->num_rows($resql);
+ //print 'Nb of invoice found for this amount and company :'.$num.'
';
+ if ($num >= 1)
+ {
+ $obj=$db->fetch_object($resql);
+ $facid=$obj->rowid;
+
+ $sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement_facture (fk_facture, fk_paiement, amount)";
+ $sql.= " VALUES (".$facid.",".$row[$i]['paymentid'].",".$row[$i]['pamount'].")";
+
+ $res += $db->query($sql);
+
+ print $langs->trans('MigrationProcessPaymentUpdate', 'facid='.$facid.'-paymentid='.$row[$i]['paymentid'].'-amount='.$row[$i]['pamount'])."
\n";
+ }
+ }
+ else
+ {
+ print 'ERROR';
+ }
+ }
+
+ if ($res > 0)
+ {
+ print $langs->trans('MigrationSuccessfullUpdate')."
";
}
else
{
- print 'ERROR';
+ print $langs->trans('MigrationPaymentsNothingUpdatable')."
\n";
}
- }
-
- if ($res > 0)
- {
- print $langs->trans('MigrationSuccessfullUpdate')."
";
+
+ $db->commit();
}
else
{
print $langs->trans('MigrationPaymentsNothingUpdatable')."
\n";
}
-
- $db->commit();
}
else
{
@@ -450,94 +472,124 @@ function migrate_paiements_orphelins_2($db,$langs,$conf)
print '
';
print ''.$langs->trans('MigrationPaymentsUpdate')."
\n";
-
- // Tous les enregistrements qui sortent de cette requete devrait avoir un pere dans llx_paiement_facture
- $sql = "SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
- $sql.= " bu2.url_id as socid";
- $sql.= " FROM (".MAIN_DB_PREFIX."paiement as p, ".MAIN_DB_PREFIX."bank_url as bu, ".MAIN_DB_PREFIX."bank as b)";
- $sql.= " left join llx_paiement_facture as pf on pf.fk_paiement=p.rowid";
- $sql.= " left join llx_bank_url as bu2 on (bu.fk_bank=bu2.fk_bank AND bu2.type='company')";
- $sql.= " WHERE pf.rowid IS NULL AND (p.fk_bank=bu.fk_bank AND bu.type='payment') AND bu.fk_bank = b.rowid";
- $sql.= " AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
- $resql = $db->query($sql);
-
- dolibarr_install_syslog("upgrade2::migrate_paiements_orphelins_2 sql=".$sql);
- $row = array();
- if ($resql)
+
+ $result = $db->DDLDescTable(MAIN_DB_PREFIX."paiement","fk_facture");
+ $obj = $db->fetch_object($result);
+ if ($obj)
{
- $i = $j = 0;
- $num = $db->num_rows($resql);
-
- while ($i < $num)
+ // Tous les enregistrements qui sortent de cette requete devrait avoir un pere dans llx_paiement_facture
+ $sql = "SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
+ $sql.= " bu2.url_id as socid";
+ $sql.= " FROM (".MAIN_DB_PREFIX."paiement as p, ".MAIN_DB_PREFIX."bank_url as bu, ".MAIN_DB_PREFIX."bank as b)";
+ $sql.= " LEFT JOIN llx_paiement_facture as pf ON pf.fk_paiement = p.rowid";
+ $sql.= " LEFT JOIN llx_bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')";
+ $sql.= " WHERE pf.rowid IS NULL AND (p.fk_bank = bu.fk_bank AND bu.type = 'payment') AND bu.fk_bank = b.rowid";
+ $sql.= " AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
+
+ $resql = $db->query($sql);
+
+ dolibarr_install_syslog("upgrade2::migrate_paiements_orphelins_2 sql=".$sql);
+ $row = array();
+ if ($resql)
{
- $obj = $db->fetch_object($resql);
- if ($obj->pamount == $obj->bamount && $obj->socid) // Pour etre sur d'avoir bon cas
+ $i = $j = 0;
+ $num = $db->num_rows($resql);
+
+ while ($i < $num)
{
- $row[$j]['paymentid'] = $obj->rowid ; // paymentid
- $row[$j]['pamount'] = $obj->pamount;
- $row[$j]['fk_bank'] = $obj->fk_bank;
- $row[$j]['bamount'] = $obj->bamount;
- $row[$j]['socid'] = $obj->socid;
- $row[$j]['datec'] = $obj->datec;
- $j++;
- }
- $i++;
- }
- }
- else {
- dol_print_error($db);
- }
-
- if (sizeof($row))
- {
- print $langs->trans('OrphelinsPaymentsDetectedByMethod', 2).': '.sizeof($row)."
\n";
- $db->begin();
-
- $res = 0;
- for ($i = 0 ; $i < sizeof($row) ; $i++)
- {
- if ($conf->global->MAIN_FEATURES_LEVEL == 2) print '* '.$row[$i]['datec'].' paymentid='.$row[$i]['paymentid'].' '.$row[$i]['pamount'].' fk_bank='.$row[$i]['fk_bank'].' '.$row[$i]['bamount'].' socid='.$row[$i]['socid'].'
';
-
- // On cherche facture sans lien paiement et du meme montant et pour meme societe.
- $sql=" SELECT distinct f.rowid from ".MAIN_DB_PREFIX."facture as f";
- $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid = pf.fk_facture";
- $sql.=" WHERE f.fk_statut in (2,3) AND fk_soc = ".$row[$i]['socid']." AND total_ttc = ".$row[$i]['pamount'];
- $sql.=" AND pf.fk_facture IS NULL";
- $sql.=" ORDER BY f.fk_statut";
- //print $sql.'
';
- $resql=$db->query($sql);
- if ($resql)
- {
- $num = $db->num_rows($resql);
- //print 'Nb of invoice found for this amount and company :'.$num.'
';
- if ($num >= 1)
+ $obj = $db->fetch_object($resql);
+ if ($obj->pamount == $obj->bamount && $obj->socid) // Pour etre sur d'avoir bon cas
{
- $obj=$db->fetch_object($resql);
- $facid=$obj->rowid;
-
- $sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement_facture (fk_facture, fk_paiement, amount)";
- $sql .= " VALUES (".$facid.",".$row[$i]['paymentid'].",".$row[$i]['pamount'].")";
- $res += $db->query($sql);
-
- print $langs->trans('MigrationProcessPaymentUpdate', 'facid='.$facid.'-paymentid='.$row[$i]['paymentid'].'-amount='.$row[$i]['pamount'])."
\n";
+ $row[$j]['paymentid'] = $obj->rowid ; // paymentid
+ $row[$j]['pamount'] = $obj->pamount;
+ $row[$j]['fk_bank'] = $obj->fk_bank;
+ $row[$j]['bamount'] = $obj->bamount;
+ $row[$j]['socid'] = $obj->socid;
+ $row[$j]['datec'] = $obj->datec;
+ $j++;
}
+ $i++;
+ }
+ }
+ else
+ {
+ dol_print_error($db);
+ }
+
+ $nberr=0;
+
+ if (sizeof($row))
+ {
+ print $langs->trans('OrphelinsPaymentsDetectedByMethod', 2).': '.sizeof($row)."
\n";
+ $db->begin();
+
+ $res = 0;
+ for ($i = 0 ; $i < sizeof($row) ; $i++)
+ {
+ if ($conf->global->MAIN_FEATURES_LEVEL == 2) print '* '.$row[$i]['datec'].' paymentid='.$row[$i]['paymentid'].' '.$row[$i]['pamount'].' fk_bank='.$row[$i]['fk_bank'].' '.$row[$i]['bamount'].' socid='.$row[$i]['socid'].'
';
+
+ // On cherche facture sans lien paiement et du meme montant et pour meme societe.
+ $sql=" SELECT distinct f.rowid from ".MAIN_DB_PREFIX."facture as f";
+ $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid = pf.fk_facture";
+ $sql.=" WHERE f.fk_statut in (2,3) AND fk_soc = ".$row[$i]['socid']." AND total_ttc = ".$row[$i]['pamount'];
+ $sql.=" AND pf.fk_facture IS NULL";
+ $sql.=" ORDER BY f.fk_statut";
+ //print $sql.'
';
+ $resql=$db->query($sql);
+ if ($resql)
+ {
+ $num = $db->num_rows($resql);
+ //print 'Nb of invoice found for this amount and company :'.$num.'
';
+ if ($num >= 1)
+ {
+ $obj=$db->fetch_object($resql);
+ $facid=$obj->rowid;
+
+ $sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement_facture (fk_facture, fk_paiement, amount)";
+ $sql.= " VALUES (".$facid.",".$row[$i]['paymentid'].",".$row[$i]['pamount'].")";
+ $res += $db->query($sql);
+
+ print $langs->trans('MigrationProcessPaymentUpdate', 'facid='.$facid.'-paymentid='.$row[$i]['paymentid'].'-amount='.$row[$i]['pamount'])."
\n";
+ }
+ }
+ else
+ {
+ print 'ERROR';
+ $nberr++;
+ }
+ }
+
+ if ($res > 0)
+ {
+ print $langs->trans('MigrationSuccessfullUpdate')."
";
}
else
{
- print 'ERROR';
+ print $langs->trans('MigrationPaymentsNothingUpdatable')."
\n";
}
- }
-
- if ($res > 0)
- {
- print $langs->trans('MigrationSuccessfullUpdate')."
";
+
+ $db->commit();
}
else
{
print $langs->trans('MigrationPaymentsNothingUpdatable')."
\n";
}
-
- $db->commit();
+
+ // Delete obsolete fields fk_facture
+ $db->begin();
+
+ $sql = "ALTER TABLE ".MAIN_DB_PREFIX."paiement DROP COLUMN fk_facture";
+ $db->query($sql);
+
+ if (!$nberr)
+ {
+ $db->commit();
+ }
+ else
+ {
+ print 'ERROR';
+ $db->rollback();
+ }
}
else
{
@@ -641,7 +693,8 @@ function migrate_contracts_det($db,$langs,$conf)
print $langs->trans('MigrationUpdateFailed').'
';
}
}
- else {
+ else
+ {
print $langs->trans('MigrationContractsNothingToUpdate')."
\n";
}
}
@@ -922,9 +975,7 @@ function migrate_paiementfourn_facturefourn($db,$langs,$conf)
$result = $db->DDLDescTable(MAIN_DB_PREFIX."paiementfourn","fk_facture_fourn");
$obj = $db->fetch_object($result);
if ($obj)
- {
- $db->begin();
-
+ {
$error=0;
$nb=0;
@@ -956,6 +1007,8 @@ function migrate_paiementfourn_facturefourn($db,$langs,$conf)
$check_num = $db->num_rows($check_resql);
if ($check_num == 0)
{
+ $db->begin();
+
if ($nb == 0)
{
print '