API REST: remboursement des factures d'avoir

Bonjour,
après avoir joué un peu avec les remboursement de facture d’avoir par l’API, je pense qu’il y a un problème.
Je crois avoir trouvé une solution, mais je voudrais savoir si elle correcte ou non, d’où mon message.

Voici le problème, en version 13.0.2:

  1. Je crée une facture d’avoir. Le montant est donc négatif.
  2. J’envoie un paiement par l’API. Là, je me prend systématiquement l’erreur suivante: « Payment amount on invoice ID NNN (50) is higher than remain to pay ». Et ceci, que le montant dans le paiement soit négatif ou positif.

Du coup, en l’état actuel des choses, je ne vois pas comment enregistrer des paiement de facture d’avoir par l’API .

Solution trouvée:
Dans le code de Dolibarr, je vois que pour les avoirs, on teste les valeurs absolues des montants et on enregistre toujours un montant négatifs pour le remboursement.

htdocs/compta/paiement.php:

// Check amount
if ($amounts[$cursorfacid] && (abs($amounts[$cursorfacid]) > abs($amountsresttopay[$cursorfacid])))
{
    $addwarning = 1;
    $formquestion['text'] = img_warning($langs->trans("PaymentHigherThanReminderToPay")).' '.$langs->trans("HelpPaymentHigherThanReminderToPay");
}

[...]                

if ($tmpinvoice->type == Facture::TYPE_CREDIT_NOTE)
{
    $newvalue = price2num($value, 'MT');
    $amounts[$key] = - abs($newvalue);
}

Par contre dans le code de l’API il n’y a pas de trace de valeur absolue, ce qui induit le rejet des paiements:
htdocs/compta/facture/class/api_invoices.class.php:

if ($amount > $remainstopay && !$accepthigherpayment) {
    $this->db->rollback();
    throw new RestException(400, 'Payment amount on invoice ID '.$id.' ('.$amount.') is higher than remain to pay ('.$remainstopay.')');
}

if ($this->invoice->type == Facture::TYPE_CREDIT_NOTE) {
    $amount = -$amount;
}

J’ai donc modifié le code de api_invoices.class.php pour faire la même chose que compta/paiement.php:

if (!$accepthigherpayment && abs($amount) > abs($remainstopay)) {
    $this->db->rollback();
    throw new RestException(400, 'Payment amount on invoice ID '.$id.' ('.$amount.') is higher than remain to pay ('.$remainstopay.')');
}
    
if ($this->invoice->type == Facture::TYPE_CREDIT_NOTE) {
    $amount = - abs($amount);
}

Qu’en pensez-vous ?
Si c’est correct, est-il possible que cette modif soit intégré dans la prochaine release ?

En fait, je pense que c’est plutôt un bug report qu’un sujet de discussion de forum. Du coup j’ai ouvert un ticket sur le github.
Faut-il supprimer le post ?

1 « J'aime »

Bonjour @guillaume.s

non laisse ton post : ça permettra d’éventuelle discussion (ou pas)
très bonne initiative le report sur git :slight_smile: