changeset b818ce5257dc in modules/notification_email:default
details:
https://hg.tryton.org/modules/notification_email?cmd=changeset;node=b818ce5257dc
description:
Send client email via server
issue9449
review292001002
diffstat:
notification.py | 131 +++++++++++--------------------------------------------
1 files changed, 27 insertions(+), 104 deletions(-)
diffs (186 lines):
diff -r 3178b506c94d -r b818ce5257dc notification.py
--- a/notification.py Tue Aug 11 22:19:15 2020 +0200
+++ b/notification.py Thu Sep 17 17:18:02 2020 +0200
@@ -6,7 +6,7 @@
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.nonmultipart import MIMENonMultipart
-from email.utils import formataddr, getaddresses
+from email.utils import getaddresses
from sql.operators import Concat
from genshi.template import TextTemplate
@@ -23,19 +23,6 @@
from trytond.ir.resource import ResourceAccessMixin
-_EMAIL_MODELS = [
- 'res.user',
- 'party.party',
- 'web.user',
- 'company.employee',
- 'commission.agent']
-
-
-def _formataddr(name, email):
- if name:
- name = str(Header(name, 'utf-8'))
- return formataddr((name, email))
-
class Email(ModelSQL, ModelView):
"Email Notification"
@@ -53,7 +40,6 @@
'ir.model.field', "Recipients",
domain=[
('model.model', '=', Eval('model')),
- ('relation', 'in', _EMAIL_MODELS),
],
depends=['model'],
help="The field that contains the recipient(s).")
@@ -71,7 +57,6 @@
'ir.model.field', "Secondary Recipients",
domain=[
('model.model', '=', Eval('model')),
- ('relation', 'in', _EMAIL_MODELS),
],
depends=['model'],
help="The field that contains the secondary recipient(s).")
@@ -89,7 +74,6 @@
'ir.model.field', "Hidden Recipients",
domain=[
('model.model', '=', Eval('model')),
- ('relation', 'in', _EMAIL_MODELS),
],
depends=['model'],
help="The field that contains the hidden recipient(s).")
@@ -130,6 +114,25 @@
model = fields.Function(
fields.Char("Model"), 'on_change_with_model', searcher='search_model')
+ @classmethod
+ def __setup__(cls):
+ pool = Pool()
+ EmailTemplate = pool.get('ir.email.template')
+ super().__setup__()
+ for field in [
+ 'recipients',
+ 'recipients_secondary',
+ 'recipients_hidden',
+ ]:
+ field = getattr(cls, field)
+ field.domain.append(['OR',
+ ('relation', 'in', EmailTemplate.email_models()),
+ [
+ ('model.model', 'in', EmailTemplate.email_models()),
+ ('name', '=', 'id'),
+ ],
+ ])
+
def get_rec_name(self, name):
return self.content.rec_name
@@ -155,96 +158,16 @@
def search_model(cls, name, clause):
return [('content.model',) + tuple(clause[1:])]
- def _get_address(self, record):
+ def _get_addresses(self, value):
pool = Pool()
- User = pool.get('res.user')
- try:
- Party = pool.get('party.party')
- except KeyError:
- Party = None
- try:
- WebUser = pool.get('web.user')
- except KeyError:
- WebUser = None
- try:
- Employee = pool.get('company.employee')
- except KeyError:
- Employee = None
- try:
- Agent = pool.get('commission.agent')
- except KeyError:
- Agent = None
- if isinstance(record, User) and record.email:
- return _formataddr(record.rec_name, record.email)
- elif Party and isinstance(record, Party):
- contact = record.contact_mechanism_get(
- 'email', usage=self.contact_mechanism)
- if contact and contact.email:
- return _formataddr(
- contact.name or record.rec_name, contact.email)
- elif WebUser and isinstance(record, WebUser):
- name = None
- if record.party:
- name = record.party.rec_name
- return _formataddr(name, record.email)
- elif Employee and isinstance(record, Employee):
- return self._get_address(record.party)
- elif Agent and isinstance(record, Agent):
- return self._get_address(record.party)
-
- def _get_addresses(self, value):
- if isinstance(value, (list, tuple)):
- addresses = (self._get_address(v) for v in value)
- else:
- addresses = [self._get_address(value)]
- return [a for a in addresses if a]
-
- def _get_language(self, record):
- pool = Pool()
- Configuration = pool.get('ir.configuration')
- User = pool.get('res.user')
- Lang = pool.get('ir.lang')
- try:
- Party = pool.get('party.party')
- except KeyError:
- Party = None
- try:
- WebUser = pool.get('web.user')
- except KeyError:
- WebUser = None
- try:
- Employee = pool.get('company.employee')
- except KeyError:
- Employee = None
- try:
- Agent = pool.get('commission.agent')
- except KeyError:
- Agent = None
- if isinstance(record, User):
- if record.language:
- return record.language
- elif Party and isinstance(record, Party):
- if record.lang:
- return record.lang
- elif WebUser and isinstance(record, WebUser):
- if record.party and record.party.lang:
- return record.party.lang
- elif Employee and isinstance(record, Employee):
- if record.party.lang:
- return record.party.lang
- elif Agent and isinstance(record, Agent):
- if record.party.lang:
- return record.party.lang
- lang, = Lang.search([
- ('code', '=', Configuration.get_language()),
- ], limit=1)
- return lang
+ EmailTemplate = pool.get('ir.email.template')
+ with Transaction().set_context(usage=self.contact_mechanism):
+ return EmailTemplate.get_addresses(value)
def _get_languages(self, value):
- if isinstance(value, (list, tuple)):
- return {self._get_language(v) for v in value}
- else:
- return {self._get_language(value)}
+ pool = Pool()
+ EmailTemplate = pool.get('ir.email.template')
+ return EmailTemplate.get_languages(value)
def get_email(self, record, from_, to, cc, bcc, languages):
pool = Pool()