Process pour création d'un abonnement + paiement sur place

Bonjour,
J’essaie de mettre en place un process pour permettre de créer un adhérent à la caisse d’un tier lieu.
Quel est le fonctionnement adéquate pour créer un abonnement via un paiement sur le point de vente ?
J’ai compris que le point de vente générait une facture et les abonnements généraient leur propre facture.
Merci

Bonjour @Njord,

Il n’y a malheureusement pas d’option pour générer un abonnement depuis le point de vente.
Les abonnements peuvent être générés automatiquement depuis une commande client, mais cette fonctionnalité n’est pas compatible avec le point de vente.

La seule solution simple (sans développements dans Dokos) que je verrai serait de créer un script serveur (python) pour créer l’abonnement à la validation de la facture de point de vente…

Bon après-midi

Bonjour @chdecultot,

Merci pour ta réponse.

Y a un aspect qui m’échappe :

  • le client C achète via le PDV l’article X et une facture est gĂ©nĂ©rĂ©e
  • le script dĂ©tecte un achat de l’article X et crĂ©Ă© un abonnement avec l’article X pour le client C

Comment je lie l’achat via le PDV et le paiement de l’abonnement / validation de l’abonnement ? quel serait le lien entre la facture de l’abonnement et la facture du PDV ?
Sachant que la plupart du temps, la facture du PDV est composée de plusieurs articles.

D’ailleurs avant de coder le script, comment suis-je censé faire pour valider un abonnement qui a été réglé par le PDV ?

Merci pour ton aide !

Hello @chdecultot,
Je me permets de te relancer :slight_smile:
Merci !

Bonjour @Njord,

Voici un exemple qui pourra te servir de base pour tes personnalisations.
J’insiste sur le fait que le flux d’abonnement n’est actuellement pas conçu pour être déclenché depuis une facture de point de vente, donc on fait une sorte de bricolage pour répondre à ton besoin.

  1. J’ai ajouté un champ personnalisé dans les factures de point de vente pour le retrouver dans le point de vente et pouvoir choisir la récurrence de facturation (s’il y en a plusieurs possibles, sinon tu peux coder directement la récurrence dans le script).

On ajoute également le même champ dans les factures pour récupérer l’information du point de vente:

  1. Le flux a mettre en place est le suivant:

Facture de point de vente => Clôture => Facture consolidée => Abonnement

Initialement je pensais qu’on pouvait créer l’abonnement à la validation de point de vente, mais étant donné que plusieurs factures associées au même client peuvent être consolidées en une facture unique, le plus simple est d’attendre la génération de la facture finale pour générer l’abonnement.
L’inconvénient est que l’abonnement ne sera généré qu’en fin de journée à la clôture de la caisse.
Si vous partez du principe que vous ne faites qu’une facture de point de vente par jour par client, tu peux modifier la logique, mais ça me semble plus compliqué à mettre en place et moins robuste.

Pour générer l’abonnement, tu peux ajouter ce script, qui déclenche la création d’un abonnement à la validation d’une facture consolidée de point de vente:

if doc.is_consolidated:
    subscription = None
    for item in doc.items:
        if frappe.db.get_value("Item", item.item_code, "is_recurring_item"):
            if subscription:
                subscription.append(
                "plans",
                    {
                        "item": item.item_code,
                        "qty": item.qty,
                        "uom": item.uom,
                        "fixed_rate": item.rate,
                        "description": item.description,
                        "price_determination": "Fixed rate",
                        "status": "Active" # A garder pour la génération de la commande
                    },
                )
                subscription.save()
            else:
                subscription = frappe.new_doc("Subscription")
                subscription.customer = doc.customer
                subscription.company = doc.company
                subscription.currency = doc.currency
                subscription.start = frappe.utils.nowdate()
                subscription.recurrence_period = doc.get("custom_récurrence_de_facturation") or "Monthly"
                subscription.generate_invoice_before_payment = 0
                subscription.generate_invoice_at_period_start = 1
                subscription.append(
                    "plans",
                    {
                        "item": item.item_code,
                        "qty": item.qty,
                        "uom": item.uom,
                        "fixed_rate": item.rate,
                        "description": item.description,
                        "price_determination": "Fixed rate",
                        "status": "Active" # A garder pour la génération de la commande
                    },
                )
                subscription.insert()
    
    if subscription:
        so = subscription.generate_sales_order()
        frappe.db.set_value("Sales Order", so.name, "per_billed", 100.0)
        frappe.db.set_value("Sales Order", so.name, "status", "Closed")

        subscription.set_state("sales_invoice", doc.name)
        frappe.db.set_value(doc.doctype, doc.name, "subscription", subscription.name)

La subtilité est dans la dernière partie: on lance la génération d’une commande client qu’on ferme, afin de revenir sur le flux de vente standard et on lie la facture consolidée avec l’abonnement

Je n’ai malheureusement pas le temps de tester plus loin ce flux, il faudrait notamment vérifier que la génération de la facture suivante se fait correctement.

Bonne fin de journée !