64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Consentimiento de marketing del paciente, por canal.
|
|
|
|
Las campañas (marketing) NUNCA escriben a quien no autorizó recibirlas. Los
|
|
avisos transaccionales (recordatorio de cita, confirmación, encuesta de salida)
|
|
NO dependen de esto: son parte del servicio que el paciente ya contrató.
|
|
|
|
El consentimiento es explícito y nace APAGADO: la clínica lo registra cuando el
|
|
paciente lo autoriza (por WhatsApp, en recepción, etc.). `consentimiento_marketing`
|
|
es el interruptor general; `consentimiento_whatsapp` / `consentimiento_email`
|
|
autorizan canal por canal.
|
|
"""
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class ResPartner(models.Model):
|
|
_inherit = 'res.partner'
|
|
|
|
consentimiento_marketing = fields.Boolean(
|
|
string='Acepta marketing', default=False, copy=False,
|
|
help='Autorización general para recibir promociones y campañas.')
|
|
consentimiento_whatsapp = fields.Boolean(
|
|
string='Marketing por WhatsApp', default=False, copy=False)
|
|
consentimiento_email = fields.Boolean(
|
|
string='Marketing por correo', default=False, copy=False)
|
|
consentimiento_at = fields.Datetime(
|
|
string='Consentimiento registrado el', copy=False)
|
|
consentimiento_origen = fields.Char(
|
|
string='Origen del consentimiento', copy=False)
|
|
|
|
def _marketing_permitido(self, canal):
|
|
"""True si el paciente autorizó marketing por `canal` (whatsapp|email).
|
|
|
|
Exige el interruptor general Y el del canal. Sin autorización explícita
|
|
devuelve False: el silencio no es consentimiento.
|
|
"""
|
|
self.ensure_one()
|
|
if not self.consentimiento_marketing:
|
|
return False
|
|
if canal == 'whatsapp':
|
|
return bool(self.consentimiento_whatsapp)
|
|
if canal == 'email':
|
|
return bool(self.consentimiento_email)
|
|
return False
|
|
|
|
@api.model
|
|
def _marcar_consentimiento(self, partner, whatsapp=None, email=None,
|
|
general=None, origen=''):
|
|
"""Registra el consentimiento de un paciente (update parcial)."""
|
|
vals = {}
|
|
if general is not None:
|
|
vals['consentimiento_marketing'] = bool(general)
|
|
if whatsapp is not None:
|
|
vals['consentimiento_whatsapp'] = bool(whatsapp)
|
|
if email is not None:
|
|
vals['consentimiento_email'] = bool(email)
|
|
if not vals:
|
|
return partner
|
|
vals['consentimiento_at'] = fields.Datetime.now()
|
|
vals['consentimiento_origen'] = (origen or '')[:120]
|
|
partner.write(vals)
|
|
return partner
|