Mise à jour contact facture abonnement pas automatique

Hello, actuellement si l’on change le contact de facture sur la fiche d’un client, ce champs ne semble pas se mettre à jour dans un abonnement qui serait lié au même client.

Possible de faire en sorte que lorsqu’on change le contact de facturation du client cela se répercute automatiquement sur le contact de facturation de l’abonnement svp ?

Merci

Bonjour @maximeIndieHosters,

J’ai ouvert un ticket pour traiter ce sujet: [Feat] Automatically update the invoicing contact person in subscription when changed in contacts (#366) · Issues · Dokos / Dokos · GitLab

En attendant qu’on ait la bande passante pour proposer quelque chose de standard, voici un script python qui peut être mis en place immédiatement:

if doc.is_billing_contact:
    for link in doc.links:
        if link.link_doctype == "Customer" and frappe.db.get_value("Subscription", filters={"customer": link.link_name}):
            for subscription in frappe.db.get_all("Subscription", filters={"customer": link.link_name}):
                frappe.db.set_value("Subscription", subscription.name, "contact_person", doc.name)

Bonne fin de journée

Hello Charles,

J’ai testé mais je vois quelques effets de bords.

Effectivement, je suis allé dans un contact rattaché à un client et j’ai coché la case “contact de facturation” et il s’est bien retrouvé dans le contact de facture de l’abo sauf que le champs email en-dessous n’a pas été actualisé :
Capture d’écran 2022-12-14 à 13.07.36

Autre chose : que se passe-t-il si jamais l’on coche “contact de facturation” sur plusieurs contacts ?

Salut Maxime,

Voilà un script modifié qui devrait mettre également à jour l’adresse email.
Dans le précédent script je ne mettais à jour que le lien vers le contact, là ça enregistre à nouveau l’abonnement, donc ça doit récupérer son adresse email principale:

if doc.is_billing_contact:
    for link in doc.links:
        if link.link_doctype == "Customer" and frappe.db.get_value("Subscription", filters={"customer": link.link_name}):
            for subscription in frappe.db.get_all("Subscription", filters={"customer": link.link_name}):
                subscription = frappe.get_doc("Subscription", subscription.name)
                subscription.contact_person = doc.name
                subscription.save()

Ce script met à jour l’abonnement dès qu’on enregistre un contact, donc si plusieurs personnes sont considérées comme des contacts de facturation, c’est le dernier contact enregistré qui sera ajouté dans l’abonnement.

Bonne journée

Testé, ça fonctionne. Merci :slight_smile:
Je précise que rien n’est prévu en l’état si on décoche le fait qu’un contact soit le “contact de facturation”. Iel reste inscrit comme contact dans l’abonnement.

En l’état c’est un cas relativement rare. Mais bon à garder en tête si jamais.