Se rendre au contenu

⚙️Custom Odoo : Générer et envoyer en signature un mandat de prélèvement

En Standard, Odoo ne permet pas d'utiliser la signature électronique pour faire signer le mandat de prélèvement que l'on vient de générer. Voici comment faire cela automatiquement.
6 décembre 2024 par
⚙️Custom Odoo : Générer et envoyer en signature un mandat de prélèvement
LCSX Tech, Laurent Cossiaux
| Aucun commentaire pour l'instant
⚠️

Nécessite d'avoir des licences "Personnalisées" (ou Custom) d'Odoo.

Si vous êtes en licence Standard, vous risquez de passez automatiquement en licence Personnalisée.


Résultat

Il est maintenant possible de générer un mandat PDF et de l'envoyer automatiquement en signature. Vous serez notifié une fois le mandat signé.


Etapes

Créer une action serveur

  1. Activer le mode développeur
  2. Aller dans Paramètres
  3. Menu "Technique"
  4. Cliquer sur Action serveur
  5. Puis sur le bouton "Nouveau"

Nom: Générer & Signer un mandat de prélèvement
Type: Exécuter le code
Modèle: Mandat de prélèvement 
Code:

for record in records:
    # Generate mandat (pdf report)
    pdf_report = env.ref('account_sepa_direct_debit.sdd_mandate_form_report_main')
    content, _report_type = env['ir.actions.report']._render_qweb_pdf(
        pdf_report.report_name,
        res_ids=[record.id],
    )
   
    # Create Attachment
    attachment = env['ir.attachment'].create({
        'type': 'binary',
        'name': 'Mandat.pdf',
        'res_model': 'mail.compose.message',
        'datas': b64encode(content),
    })

    # Create Sign template
    sign_template = env['sign.template'].create({
        'name': 'Mandat de Prélèvement %s' % record.id,
        'attachment_id': attachment.id,
        'active': False,
    })
    env['sign.item'].create([
        {
            'type_id': env.ref('sign.sign_item_type_date').id,
            'required': True,
            'responsible_id': env.ref('sign.sign_item_role_customer').id,
            'page': 1,
            'posX': 0.261,
            'posY': 0.738,
            'template_id': sign_template.id,
            'width': 0.150,
            'height': 0.015,
        },
        {
            'type_id': env.ref('sign.sign_item_type_signature').id,
            'required': True,
            'responsible_id': env.ref('sign.sign_item_role_customer').id,
            'page': 1,
            'posX': 0.583,
            'posY': 0.729,
            'template_id': sign_template.id,
            'width': 0.328,
            'height': 0.076,
        },
        {
            'type_id': env.ref('sign.sign_item_type_text').id,
            'required': True,
            'responsible_id': env.ref('sign.sign_item_role_customer').id,
            'page': 1,
            'posX': 0.049,
            'posY': 0.762,
            'template_id': sign_template.id,
            'width': 0.359,
            'height': 0.015,
        },
    ])
   
    # Create Sign request
    sign_request = env['sign.request'].create({
        'template_id': sign_template.id,
        'request_item_ids': [Command.create({
            'partner_id': record.partner_id.id,
            'role_id': env.ref('sign.sign_item_role_customer').id,
        })],
        'reference': 'Mandat de prélèvement',
        'subject': 'Signature de votre mandat de prélèvement',
        'message': 'Bonjour, veuillez signer votre mandat de prélèvement pour confirmer votre inscription.',
        'attachment_ids': [(4,attachment.id)],
        'reference_doc': '%s,%s' % (model._name, record.id),
    })
    record.message_post(body='Mandat de prélèvement envoyé en <a href="sign.request/%s">signature</a>.' % sign_request.id, body_is_html=True)


Afficher dans les actions des mandats de prélèvement

Cliquer sur "Créer une action contextuelle".


 

⚙️Custom Odoo : Générer et envoyer en signature un mandat de prélèvement
LCSX Tech, Laurent Cossiaux 6 décembre 2024
Partager cet article
Étiquettes
Se connecter pour laisser un commentaire.
Comment forcer l’affichage d’une vue utilisateur dans Odoo (tutoriel simple, sans code)
Guide pas à pas pour afficher la bonne vue au bon endroit dans Odoo, sans développement