Factures pas inscrites en DB par le cron createRecurringInvoices

Bonjour,

J’ai un problème avec l’exécution de la tâche cron « Génération des factures récurrentes (ventes) » (createRecurringInvoices).

  • Version de Dolibarr 16.0.4
  • PHP 7.4.33
  • MariaDB 10.4 (MySQL or MariaDB 5.5.5-10.4.25-MariaDB-1:10.4.25+maria~stretch-log)

Dans certains cas, pour lesquels je n’ai pas encore réussi à identifier la raison - c’est pourquoi je vous sollicite, la facture n’est pas créée dans la base de données, mais Dolibarr retourne un identifiant, p.ex 231. Si elle est créée, elle est supprimée par la suite, mais pas de trace dans les logs donc peu probable (n’est ce pas ?).

Pas de retour d’erreur, le processus automatique prévu par Dolibarr continue… Les lignes de factures sont insérées, ainsi que les champs personnalisés (toujours avec l’id 231), puis la facture est validée (c’est ce qui est prévu par la facture récurrente), la référence définie (ex. PAT-24-000168), et le document PDF créé. Le document est bien à sa place dans les dossiers documents (PAT-24-000168.pdf).

La tâche est marquée comme exécutée, indique que les factures ont été créées, même celles qui manquent, donc cela passe inaperçu, par exemple (cf. log plus loin) j’ai bien :
Facture PAT-24-000168 généré depuis la facture modèle récurrente Cotisation de XXX (664)

Le site utilise le module SwissBanking. Lorsqu’il est activé, la tâche s’interrompt (par Constraint NotBlank de Symfony utilisé par le module). Le module essaie certainement de récupérer la facture dans la DB par son ID et ne la trouve pas. Je vais prévenir les développeurs aussi de ce problème d’exception en cas de tâche cron. Mais dans ce cas, c’est l’interruption répétée de la tâche qui m’a fait réaliser que certaines factures n’étaient pas générées.

Est-ce que vous auriez une piste pour comprendre la raison de cette non création ?

Voici 5 lignes du log d’une instance de tests :

2024-03-07 09:14:31 DEBUG   MonAdresseIP   sql=UPDATE aeyo_facture_rec SET date_last_gen = '2024-03-07 09:14:31', fk_user_modif = 1 WHERE rowid = 120
2024-03-07 09:14:31 DEBUG   MonAdresseIP   FactureRec::setNextDate
2024-03-07 09:14:31 DEBUG   MonAdresseIP   sql=UPDATE aeyo_facture_rec SET date_when = '2025-02-06 00:00:00', nb_gen_done = nb_gen_done + 1 WHERE rowid = 120
2024-03-07 09:14:31 DEBUG   MonAdresseIP   sql=INSERT INTO aeyo_facture ( ref, entity, ref_ext, type, fk_soc, datec, remise_absolue, remise_percent, datef, date_pointoftax, note_private, note_public, ref_client, ref_int, fk_account, module_source, pos_source, fk_fac_rec_source, fk_facture_source, fk_user_author, fk_projet, fk_cond_reglement, fk_mode_reglement, date_lim_reglement, model_pdf, situation_cycle_ref, situation_counter, situation_final, fk_incoterms, location_incoterms, fk_multicurrency, multicurrency_code, multicurrency_tx, retained_warranty, retained_warranty_date_limit, retained_warranty_fk_cond_reglement) VALUES ('(PROV)', 1, null, '0', 664, '2024-03-07 09:14:31', NULL, NULL, '2024-02-06 00:00:00', null, 'Généré depuis la facture modèle récurrente Cotisation de XXX (664)', null, null, null, NULL, null, null, '120', null, 1, null, 2, 0, '2024-03-07 00:00:00', 'cotisations', null, null, 0, 0, '', 0, 'CHF', 1, 0, NULL, 0)
2024-03-07 09:14:31 DEBUG   MonAdresseIP   sql=UPDATE aeyo_facture SET ref='(PROV231)' WHERE rowid=231

J’ai remplacé dans la note privée le nom du tiers par XXX mais je confirme qu’il ne contient aucun caractère spécial.

Merci d’avance si vous avez des idées !

Belle journée

Bonsoir,
peut-etre un module complémentaire qui retourne une erreur et provoque de fait un rollback complet ?

Hello

Merci pour ton retour, je ne connaissais pas encore la notion de rollback ! Mais il est censé être inscrit dans les logs.

Cependant en creusant, je m’aperçois que j’avais mal compris le problème la première fois.
Le module qui bloque lors de la création de la facture est en fait le responsable, car s’il est désactivé la facture est correctement créée. Je vais directement m’adresser à ceux qui le proposent.

Belle journée