* Copyright (C) 2005 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * $Id$ * $Source$ */ require("./pre.inc.php"); if (!$user->admin) access_forbidden(); llxHeader(); print_titre("Vérifications et réparation des données de la base"); /* * Mise a jour des paiements (lien n-n paiements factures) */ print '
'; print "Mise a jour des paiments (lien n-n paiements-factures)
\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); if ($resql) { $i = 0; $row = array(); $num = $db->num_rows($resql); while ($i < $num) { $obj = $db->fetch_object($resql); $row[$i][0] = $obj->rowid ; $row[$i][1] = $obj->fk_facture; $row[$i][2] = $obj->amount; $i++; } } else { dolibarr_print_error($db); } if ($num) { print "$num paiement(s) à mettre à jour
\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 "Mise a jour paiement(s) ".$row[$i]."
\n"; } } if ($res == (2 * sizeof($row))) { $db->commit(); print "Mise à jour réussie
"; } else { $db->rollback(); print "La mise à jour à échouée
"; } } else { print "Pas ou plus de paiements orhpelins à corriger.
\n"; } /* * Mise a jour des date de contrats non renseignées */ print '
'; print "Mise a jour des dates de contrats non renseignées
\n"; $sql="update llx_contrat set date_contrat=tms where date_contrat is null"; $resql = $db->query($sql); if (! $resql) dolibarr_print_error($db); if ($db->affected_rows() > 0) print "Ok pour date de contrat
\n"; else print "Pas ou plus de date de contrats à renseigner.
\n"; $sql="update llx_contrat set datec=tms where datec is null"; $resql = $db->query($sql); if (! $resql) dolibarr_print_error($db); if ($db->affected_rows() > 0) print "Ok pour date création
\n"; else print "Pas ou plus de date de création à renseigner.
\n"; /* * Mise a jour des contrats (gestion du contrat + detail de contrat) */ $nberr=0; print '
'; print "Mise a jour des contrats sans details (gestion du contrat + detail de contrat)
\n"; $sql = "SELECT c.rowid as cref, c.date_contrat, c.statut, c.mise_en_service, c.fin_validite, c.date_cloture, c.fk_product, c.fk_facture, c.fk_user_author,"; $sql.= " p.ref, p.label, p.description, p.price, p.tva_tx, p.duration, cd.rowid"; $sql.= " FROM ".MAIN_DB_PREFIX."contrat as c"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p"; $sql.= " ON c.fk_product = p.rowid"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."contratdet as cd"; $sql.= " ON c.rowid=cd.fk_contrat"; $sql.= " WHERE cd.rowid IS NULL AND p.rowid IS NOT NULL"; $resql = $db->query($sql); if ($resql) { $i = 0; $row = array(); $num = $db->num_rows($resql); if ($num) { print "$num contrat(s) à mettre à jour
\n"; $db->begin(); while ($i < $num) { $obj = $db->fetch_object($resql); $sql = "INSERT INTO ".MAIN_DB_PREFIX."contratdet ("; $sql.= "fk_contrat, fk_product, statut, label, description,"; $sql.= "date_ouverture_prevue, date_ouverture, date_fin_validite, tva_tx, qty,"; $sql.= "subprice, price_ht, fk_user_author, fk_user_ouverture)"; $sql.= " VALUES ("; $sql.= $obj->cref.",".($obj->fk_product?$obj->fk_product:0).","; $sql.= ($obj->mise_en_service?"4":"0").","; $sql.= "'".addslashes($obj->label)."', null,"; $sql.= ($obj->mise_en_service?"'".$obj->mise_en_service."'":($obj->date_contrat?"'".$obj->date_contrat."'":"null")).","; $sql.= ($obj->mise_en_service?"'".$obj->mise_en_service."'":"null").","; $sql.= ($obj->fin_validite?"'".$obj->fin_validite."'":"null").","; $sql.= "'".$obj->tva_tx."', 1,"; $sql.= "'".$obj->price."', '".$obj->price."',".$obj->fk_user_author.","; $sql.= ($obj->mise_en_service?$obj->fk_user_author:"null"); $sql.= ")"; if ($db->query($sql)) { print "Création ligne contrat pour contrat ref ".$obj->cref."
\n"; } else { dolibarr_print_error($db); $nberr++; } $i++; } if (! $nberr) { // $db->rollback(); $db->commit(); print "Mise à jour réussie
"; } else { $db->rollback(); print "La mise à jour à échouée
"; } } else { print "Pas ou plus de contrats (liés à un produit) sans lignes de details à corriger.
\n"; } } else { print "Le champ fk_facture n'existe plus. Pas d'opération à faire.
\n"; // dolibarr_print_error($db); } /* * Mise a jour date contrat avec date min effective mise en service si inférieur */ $nberr=0; print '
'; print "Mise a jour dates contrat incorrectes (pour contrats avec detail en service)
\n"; $sql = "SELECT c.rowid as cref, c.datec, c.date_contrat, MIN(cd.date_ouverture) as datemin"; $sql.= " FROM ".MAIN_DB_PREFIX."contrat as c,"; $sql.= " ".MAIN_DB_PREFIX."contratdet as cd"; $sql.= " WHERE c.rowid=cd.fk_contrat AND cd.date_ouverture IS NOT NULL"; $sql.= " GROUP BY c.rowid, c.date_contrat"; $resql = $db->query($sql); if ($resql) { $i = 0; $row = array(); $num = $db->num_rows($resql); if ($num) { $nbcontratsmodifie=0; $db->begin(); while ($i < $num) { $obj = $db->fetch_object($resql); if ($obj->date_contrat > $obj->datemin) { print "Correction contrat ".$obj->cref." (Date contrat=".$obj->date_contrat.", Date mise service min=".$obj->datemin.")
\n"; $sql ="UPDATE ".MAIN_DB_PREFIX."contrat"; $sql.=" SET date_contrat='".$obj->datemin."'"; $sql.=" WHERE rowid=".$obj->cref; $resql2=$db->query($sql); if (! $resql2) dolibarr_print_error($db); $nbcontratsmodifie++; } $i++; } $db->commit(); if ($nbcontratsmodifie) print "$nbcontratsmodifie contrats modifiés
\n"; else print "Pas ou plus de contrats à corriger.
\n"; } } else { dolibarr_print_error($db); } /* * Mise a jour des dates de création de contrat */ print '
'; print "Mise a jour des dates de création de contrat qui ont une valeur incohérente
\n"; $sql="update llx_contrat set datec=date_contrat where datec is null or datec > date_contrat"; $resql = $db->query($sql); if (! $resql) dolibarr_print_error($db); if ($db->affected_rows() > 0) print "Ok
\n"; else print "Pas ou plus de date de contrats à corriger.
\n"; /* * Reouverture des contrats qui ont au moins une ligne non fermée */ print '
'; print "Reouverture des contrats qui ont au moins un service actif non fermée
\n"; $sql = "SELECT c.rowid as cref FROM llx_contrat as c, llx_contratdet as cd"; $sql.= " WHERE cd.statut = 4 AND c.statut=2 AND c.rowid=cd.fk_contrat"; $resql = $db->query($sql); if (! $resql) dolibarr_print_error($db); if ($db->affected_rows() > 0) { $i = 0; $row = array(); $num = $db->num_rows($resql); if ($num) { $nbcontratsmodifie=0; $db->begin(); while ($i < $num) { $obj = $db->fetch_object($resql); print "Réouverture contrat ".$obj->cref."
\n"; $sql ="UPDATE ".MAIN_DB_PREFIX."contrat"; $sql.=" SET statut=1"; $sql.=" WHERE rowid=".$obj->cref; $resql2=$db->query($sql); if (! $resql2) dolibarr_print_error($db); $nbcontratsmodifie++; $i++; } $db->commit(); if ($nbcontratsmodifie) print "$nbcontratsmodifie contrats modifiés
\n"; else print "Pas ou plus de contrats à corriger.
\n"; } } else print "Pas ou plus de contrats à réouvrir.
\n"; print "
"; $db->close(); llxFooter(); ?>