Fix: Corrige quelques problèmes avec factures de remplacement

This commit is contained in:
Laurent Destailleur 2006-11-11 15:28:17 +00:00
parent c533227062
commit 6973127bec
2 changed files with 25 additions and 15 deletions

View File

@ -1116,10 +1116,15 @@ if ($_GET['action'] == 'create')
// Type de facture // Type de facture
$facids=$facturestatic->list_replacable_invoices($soc->id); $facids=$facturestatic->list_replacable_invoices($soc->id);
$options=""; if ($facids < 0)
foreach ($facids as $key => $value)
{ {
$options.='<option value="'.$key.'">'.$value.'</option>'; dolibarr_print_error($db,$facturestatic);
exit;
}
$options="";
foreach ($facids as $facparam)
{
$options.='<option value="'.$facparam['id'].'">'.$facparam['ref'].'</option>';
} }
$facids=$facturestatic->list_qualified_avoir_invoices($soc->id); $facids=$facturestatic->list_qualified_avoir_invoices($soc->id);
$optionsav=""; $optionsav="";
@ -1676,15 +1681,14 @@ else
*/ */
if ($_GET['action'] == 'canceled') if ($_GET['action'] == 'canceled')
{ {
// Si il y a une facture de remplacement pas encore validée (etat brouillon), // S'il y a une facture de remplacement pas encore validée (etat brouillon),
// on ne permet pas de classer abandonner la facture // on ne permet pas de classer abandonner la facture.
if ($facidnext) if ($facidnext)
{ {
$facturereplacement=new Facture($db); $facturereplacement=new Facture($db);
$facturereplacement->fetch($facidnext); $facturereplacement->fetch($facidnext);
$statusreplacement=$facturereplacement->statut; $statusreplacement=$facturereplacement->statut;
} }
print "x".$statusreplacement;
if ($facidnext && $statusreplacement == 0) if ($facidnext && $statusreplacement == 0)
{ {
print '<div class="error">'.$langs->trans("ErrorCantCancelIfReplacementInvoiceNotValidated").'</div>'; print '<div class="error">'.$langs->trans("ErrorCantCancelIfReplacementInvoiceNotValidated").'</div>';

View File

@ -1801,9 +1801,12 @@ class Facture extends CommonObject
$sql.= ' WHERE fk_facture_source = '.$this->id; $sql.= ' WHERE fk_facture_source = '.$this->id;
$sql.= ' AND type < 2'; $sql.= ' AND type < 2';
if ($option == 'validated') $sql.= ' AND fk_statut = 1'; if ($option == 'validated') $sql.= ' AND fk_statut = 1';
$sql.= ' ORDER BY fk_statut DESC'; // Au cas ou base corrompu et qu'il y a une // PROTECTION BAD DATA
// facture de remplacement validee et une autre non // Au cas ou base corrompue et qu'il y a une facture de remplacement validée
// on donne priorité à la validée. Ne devrait pas arriver // et une autre non, on donne priorité à la validée.
// Ne devrait pas arriver (sauf si accès concurrentiel et que 2 personnes
// ont créé en meme temps une facture de remplacement pour la meme facture)
$sql.= ' ORDER BY fk_statut DESC';
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
if ($resql) if ($resql)
@ -2240,7 +2243,7 @@ class Facture extends CommonObject
* \brief Renvoi liste des factures remplacables * \brief Renvoi liste des factures remplacables
* Statut validee + aucun paiement + non paye + pas deja remplacées * Statut validee + aucun paiement + non paye + pas deja remplacées
* \param socid Id societe * \param socid Id societe
* \return array Tableau des factures ($id => $ref) * \return array Tableau des factures ('id'=>id, 'ref'=>ref, 'statut'=>status)
*/ */
function list_replacable_invoices($socid=0) function list_replacable_invoices($socid=0)
{ {
@ -2248,13 +2251,14 @@ class Facture extends CommonObject
$return = array(); $return = array();
$sql = "SELECT f.rowid as rowid, f.facnumber,"; $sql = "SELECT f.rowid as rowid, f.facnumber, f.fk_statut,";
$sql.= " ff.rowid as rowidnext"; $sql.= " ff.rowid as rowidnext";
$sql.= " FROM ".MAIN_DB_PREFIX."facture as f"; $sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid = pf.fk_facture"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid = pf.fk_facture";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture as ff ON f.rowid = ff.fk_facture_source"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture as ff ON f.rowid = ff.fk_facture_source";
$sql.= " WHERE f.fk_statut = 1 AND f.paye = 0 AND pf.fk_paiement IS NULL"; $sql.= " WHERE f.fk_statut = 1 AND f.paye = 0 AND pf.fk_paiement IS NULL";
$sql.= " AND IFNULL(ff.fk_statut,0) = 0"; // Doit renvoyé vrai si pas de jointure trouvé ou si jointure vers statut à 0 $sql.= " AND ff.fk_statut IS NULL"; // Renvoie vrai si pas de jointure
//$sql.= " AND IFNULL(ff.fk_statut,0) = 0"; // Renvoie vrai si pas de jointure ou si jointure vers statut à 0
if ($socid > 0) $sql.=" AND f.fk_soc = ".$socid; if ($socid > 0) $sql.=" AND f.fk_soc = ".$socid;
$sql.= " ORDER BY f.facnumber"; $sql.= " ORDER BY f.facnumber";
@ -2264,9 +2268,11 @@ class Facture extends CommonObject
{ {
while ($obj=$this->db->fetch_object($resql)) while ($obj=$this->db->fetch_object($resql))
{ {
$return[$obj->rowid]=$obj->facnumber; $return[$obj->rowid]=array( 'id' => $obj->rowid,
'ref' => $obj->facnumber,
'status' => $obj->fk_status);
} }
//print_r($return);
return $return; return $return;
} }
else else