Suppression paiement impossible multicompany

Bonjour à tous,

Je vous sollicite aujourd’hui car j’ai un problème, je cherche à supprimer un paiement sur une facture payé (utilisation des classes facture et paiement).
j’ai le module multicompany en place avec 5 entités, la gestion des utilisateurs est centralisée, lorsque j’exécute ma requête depuis l’entité principale, tout se passe correctement, mais dès que j’exécute la requête depuis une autre entité, la fonction delete ne fonctionne pas… je sais que lorsque j’exécute des requêtes via l’API, il me faut passer le paramètre DOLAPIENTITY dans les header mais la je ne vois pas vraiment comment faire, voici mon code compet

// Inclure les fichiers nécessaires
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // Inclure la classe Account

// Vérifiez le jeton CSRF
if ($_POST['token'] !== $_SESSION['newtoken']) {
    error_log('Erreur de jeton CSRF');
    die(json_encode(['status' => 'error', 'message' => 'Erreur de jeton CSRF']));
}

$entity = $_POST['entity'];
$invoice_id = $_POST['invoice_id'];

error_log("Entity: $entity, Invoice ID: $invoice_id");

// Récupération de la facture
$invoice = new Facture($db);
if ($invoice->fetch($invoice_id) <= 0) {
    error_log('Erreur lors de la récupération de la facture.');
    die(json_encode(['status' => 'error', 'message' => 'Erreur lors de la récupération de la facture.']));
}

error_log('Facture récupérée avec succès.');

// Réouvrir la facture en changeant son statut
if ($invoice->statut == Facture::STATUS_CLOSED) {
    if ($invoice->set_unpaid($user) > 0) {
        error_log('Facture réouverte avec succès (statut non payé).');
    } else {
        error_log('Erreur lors de la réouverture de la facture (statut non payé): ' . $invoice->error);
        die(json_encode(['status' => 'error', 'message' => 'Erreur lors de la réouverture de la facture (statut non payé): ' . $invoice->error]));
    }
}

// Supprimer les paiements associés à la facture
$invoice->fetch_thirdparty();
$payments = $invoice->getListOfPayments();
foreach ($payments as $payment) {
    $paiement = new Paiement($db);
    if ($paiement->fetch($payment['paiement_id']) > 0) {
        if ($paiement->delete($user) > 0) {
            error_log("Paiement ID {$payment['paiement_id']} supprimé avec succès.");
        } else {
            error_log("Erreur lors de la suppression du paiement ID {$payment['paiement_id']}: " . $paiement->error);
            die(json_encode(['status' => 'error', 'message' => "Erreur lors de la suppression du paiement ID {$payment['paiement_id']}: " . $paiement->error]));
        }
    } else {
        error_log("Erreur lors de la récupération du paiement ID {$payment['paiement_id']}: " . $paiement->error);
        die(json_encode(['status' => 'error', 'message' => "Erreur lors de la récupération du paiement ID {$payment['paiement_id']}: " . $paiement->error]));
    }
}

echo json_encode(['status' => 'success', 'message' => 'Facture réouverte et paiements supprimés.']);
}

si quelqu’un a une idée…

Merci par avance.

Bonjour

Qu’en pense l’éditeur ?

Bonjour,

Vous parlez de l’éditeur de multicompany? il est très difficile à joindre, j’ai ouvert plusieurs tickets sur son site et envoyé des mails sur d’autres sujet et n’ai pas de réponses.

On va essayer de la taguer @regis

Bonjour @Headstorm
désolé je suis en train de restructurer ma gestion de tickets.
le code que vous présentez ci-dessus est une API perso ?
sinon ce n’est pas « DOLIENTITY » mais « DOLAPIENTITY » qu’il faut envoyer avec la valeur de l’id de l’entité souhaitée dans le header de curl (CURLOPT_HTTPHEADER) avec « DOLAPIKEY »

Merci de votre retour,

je n’utilise pas l’api dans ce code, j’utilise les classes de compta/facture et de compta/paiement, je précisais simplement que lors d’un précédent développement, j’utilisais l’API et qu’il fallait rajouter DOLAPIENTITY, je me demandais si c’étais pareil dans ce cas, mais je ne vois pas comment faire.
j’ai mis mon code plus haut, l’erreur vient de la fonction delete de la classe paiement au niveau de cet endroit (code fonction delete de la classe paiement)

$billsarray = $this->getBillsArray('f.fk_statut > 1');
		if (is_array($billsarray)) {
			if (count($billsarray)) {
				$this->error = "ErrorDeletePaymentLinkedToAClosedInvoiceNotPossible";
				$this->db->rollback();
				return -1;
			}
		} else {
			$this->db->rollback();
			return -2;
		}

par contre l’erreur se produit uniquement lorsque je suis sur une entité différente de l’entité principale.

avez-vous une idée @regis ?

@Headstorm là comme ça vu que c’est du code perso il faudrait faire une visio ou autres pour que je vois tout le code

@regis ,

Je suis dispo a partir de 15h si jamais vous avez un peu de temps

N’ayant pas réussi à trouver d’aide à mon problème, je me suis résigné a utiliser des requêtes SQL pour supprimer les enregistrements dans les différentes tables, c’est pas très propre mais ca fonctionne.

merci d’avoir pris le temps pour moi.

La suppression « à la mano » de paiement ne pose t’il pas de problème avec le module logs inaltérables ?

Les paiements sont des objets traqués par le module à priori