+1
-1
@@ -14,5 +14,5 @@ Marketing
|
||||
:doc:`Campaign <marketing_campaign:index>`
|
||||
Manage campaign.
|
||||
|
||||
:doc:`E-mail <marketing_email:index>`
|
||||
:doc:`Email <marketing_email:index>`
|
||||
Manage mailing lists.
|
||||
|
||||
@@ -20,7 +20,7 @@ class Configuration(metaclass=PoolMeta):
|
||||
domain=[
|
||||
('email', '!=', None),
|
||||
],
|
||||
help="User notified when no e-mail is found to send the dunning")
|
||||
help="User notified when no email is found to send the dunning")
|
||||
|
||||
|
||||
class DunningLevel(metaclass=PoolMeta):
|
||||
@@ -47,7 +47,7 @@ class DunningLevel(metaclass=PoolMeta):
|
||||
states={
|
||||
'invisible': ~Eval('send_email'),
|
||||
},
|
||||
help="Define which e-mail to use from the party's contact mechanisms")
|
||||
help="Define which email to use from the party's contact mechanisms")
|
||||
|
||||
@classmethod
|
||||
def default_email_template(cls):
|
||||
|
||||
@@ -5,7 +5,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<xpath expr="/form/field[@name='print_on_letter']" position="after">
|
||||
<label name="send_email"/>
|
||||
<field name="send_email"/>
|
||||
<separator string="E-mail" id="email" colspan="4"/>
|
||||
<separator string="Email" id="email" colspan="4"/>
|
||||
<label name="email_template"/>
|
||||
<field name="email_template"/>
|
||||
<newline/>
|
||||
|
||||
@@ -77,7 +77,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_inbound_email_form_relate">
|
||||
<field name="name">E-mails</field>
|
||||
<field name="name">Emails</field>
|
||||
<field name="res_model">inbound.email</field>
|
||||
<field name="domain" eval="[('inbox', 'in', Eval('active_ids', []))]" pyson="1"/>
|
||||
</record>
|
||||
|
||||
@@ -45,10 +45,10 @@ Actions
|
||||
|
||||
The available actions are:
|
||||
|
||||
Send E-Mail
|
||||
^^^^^^^^^^^
|
||||
Send EMail
|
||||
^^^^^^^^^^
|
||||
|
||||
The E-mail is composed using an HTML `Genshi <https://genshi.edgewall.org/>`_
|
||||
The email is composed using an HTML `Genshi <https://genshi.edgewall.org/>`_
|
||||
template with ``record`` in the evaluation context.
|
||||
All ``<a>`` elements have their ``href`` replaced by a shortened version used
|
||||
to trigger children activities.
|
||||
|
||||
@@ -10,7 +10,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_ir_email_form_relate_activity">
|
||||
<field name="name">E-mails</field>
|
||||
<field name="name">Emails</field>
|
||||
<field name="res_model">ir.email</field>
|
||||
<field name="domain"
|
||||
eval="[('marketing_automation_activity', 'in', Eval('active_ids'))]"
|
||||
|
||||
@@ -341,8 +341,8 @@ class Activity(
|
||||
|
||||
event = fields.Selection([
|
||||
(None, ""),
|
||||
('email_opened', "E-Mail Opened"),
|
||||
('email_clicked', "E-Mail Clicked"),
|
||||
('email_opened', "Email Opened"),
|
||||
('email_clicked', "Email Clicked"),
|
||||
], "Event") # domain set by _parent_action_events
|
||||
negative = fields.Boolean("Negative",
|
||||
states={
|
||||
@@ -352,10 +352,10 @@ class Activity(
|
||||
"if the event has not happened by the end of the delay.")
|
||||
on = fields.Function(fields.Selection([
|
||||
(None, ""),
|
||||
('email_opened', "E-Mail Opened"),
|
||||
('email_opened_not', "E-Mail Not Opened"),
|
||||
('email_clicked', "E-Mail Clicked"),
|
||||
('email_clicked_not', "E-Mail Not Clicked"),
|
||||
('email_opened', "Email Opened"),
|
||||
('email_opened_not', "Email Not Opened"),
|
||||
('email_clicked', "Email Clicked"),
|
||||
('email_clicked_not', "Email Not Clicked"),
|
||||
], "On"), # domain set by _parent_action_events
|
||||
'get_on', setter='set_on')
|
||||
condition = fields.Char("Condition",
|
||||
@@ -376,17 +376,17 @@ class Activity(
|
||||
|
||||
action = fields.Selection([
|
||||
(None, ''),
|
||||
('send_email', "Send E-Mail"),
|
||||
('send_email', "Send email"),
|
||||
], "Action")
|
||||
|
||||
# Send E-mail
|
||||
# Send email
|
||||
email_from = fields.Char("From", translate=True,
|
||||
states={
|
||||
'invisible': Eval('action') != 'send_email',
|
||||
},
|
||||
help="Leave empty to use the value defined in the configuration file.")
|
||||
email_title = fields.Char(
|
||||
"E-Mail Title",
|
||||
"Email Title",
|
||||
translate=True,
|
||||
states={
|
||||
'invisible': Eval('action') != 'send_email',
|
||||
@@ -396,13 +396,13 @@ class Activity(
|
||||
"The Genshi syntax can be used "
|
||||
"with 'record' in the evaluation context.")
|
||||
email_template = fields.Text(
|
||||
"E-Mail Template",
|
||||
"Email Template",
|
||||
translate=True,
|
||||
states={
|
||||
'invisible': Eval('action') != 'send_email',
|
||||
'required': Eval('action') == 'send_email',
|
||||
},
|
||||
help="The HTML content of the E-mail.\n"
|
||||
help="The HTML content of the email.\n"
|
||||
"The Genshi syntax can be used "
|
||||
"with 'record' in the evaluation context.")
|
||||
|
||||
@@ -410,13 +410,13 @@ class Activity(
|
||||
fields.Integer("Records"), 'get_record_count')
|
||||
email_opened = fields.Function(
|
||||
fields.Integer(
|
||||
"E-Mails Opened",
|
||||
"Emails Opened",
|
||||
states={
|
||||
'invisible': Eval('action') != 'send_email',
|
||||
}), 'get_record_count')
|
||||
email_clicked = fields.Function(
|
||||
fields.Integer(
|
||||
"E-Mails Clicked",
|
||||
"Emails Clicked",
|
||||
states={
|
||||
'invisible': Eval('action') != 'send_email',
|
||||
}),
|
||||
@@ -424,42 +424,42 @@ class Activity(
|
||||
|
||||
email_open_rate = fields.Function(
|
||||
fields.Float(
|
||||
"E-mail Open Rate",
|
||||
"Email Open Rate",
|
||||
states={
|
||||
'invisible': Eval('action') != 'send_email',
|
||||
}),
|
||||
'get_rate')
|
||||
email_open_rate_trend = fields.Function(
|
||||
fields.Char(
|
||||
"E-mail Open Rate Trend",
|
||||
"Email Open Rate Trend",
|
||||
states={
|
||||
'invisible': Eval('action') != 'send_email',
|
||||
}),
|
||||
'get_trend')
|
||||
email_click_rate = fields.Function(
|
||||
fields.Float(
|
||||
"E-mail Click Rate",
|
||||
"Email Click Rate",
|
||||
states={
|
||||
'invisible': Eval('action') != 'send_email',
|
||||
}),
|
||||
'get_rate')
|
||||
email_click_rate_trend = fields.Function(
|
||||
fields.Char(
|
||||
"E-mail Click Rate Trend",
|
||||
"Email Click Rate Trend",
|
||||
states={
|
||||
'invisible': Eval('action') != 'send_email',
|
||||
}),
|
||||
'get_trend')
|
||||
email_click_through_rate = fields.Function(
|
||||
fields.Float(
|
||||
"E-mail Click-Through Rate",
|
||||
"Email Click-Through Rate",
|
||||
states={
|
||||
'invisible': Eval('action') != 'send_email',
|
||||
}),
|
||||
'get_rate')
|
||||
email_click_through_rate_trend = fields.Function(
|
||||
fields.Char(
|
||||
"E-mail Click-Through Rate Trend",
|
||||
"Email Click-Through Rate Trend",
|
||||
states={
|
||||
'invisible': Eval('action') != 'send_email',
|
||||
}),
|
||||
@@ -892,12 +892,12 @@ class RecordActivity(Workflow, ModelSQL, ModelView):
|
||||
'required': Eval('state') == 'done',
|
||||
})
|
||||
email_opened = fields.Boolean(
|
||||
"E-Mail Opened",
|
||||
"Email Opened",
|
||||
states={
|
||||
'invisible': Eval('activity_action') != 'send_email',
|
||||
})
|
||||
email_clicked = fields.Boolean(
|
||||
"E-Mail Clicked",
|
||||
"Email Clicked",
|
||||
states={
|
||||
'invisible': Eval('activity_action') != 'send_email',
|
||||
})
|
||||
|
||||
@@ -293,12 +293,12 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<record model="ir.model.button" id="record_activity_on_email_opened_button">
|
||||
<field name="model">marketing.automation.record.activity</field>
|
||||
<field name="name">on_email_opened</field>
|
||||
<field name="string">E-Mail Opened</field>
|
||||
<field name="string">Email Opened</field>
|
||||
</record>
|
||||
<record model="ir.model.button" id="record_activity_on_email_clicked_button">
|
||||
<field name="model">marketing.automation.record.activity</field>
|
||||
<field name="name">on_email_clicked</field>
|
||||
<field name="string">E-Mail Clicked</field>
|
||||
<field name="string">Email Clicked</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.report" id="report_unsubscribe">
|
||||
|
||||
@@ -161,27 +161,27 @@ class Activity(Abstract):
|
||||
'on_change_with_activity_action')
|
||||
record_count = fields.Integer("Records")
|
||||
email_opened = fields.Integer(
|
||||
"E-Mails Opened",
|
||||
"Emails Opened",
|
||||
states={
|
||||
'invisible': Eval('activity_action') != 'send_email',
|
||||
})
|
||||
email_clicked = fields.Integer(
|
||||
"E-Mails Clicked",
|
||||
"Emails Clicked",
|
||||
states={
|
||||
'invisible': Eval('activity_action') != 'send_email',
|
||||
})
|
||||
email_open_rate = fields.Float(
|
||||
"E-mail Open Rate",
|
||||
"Email Open Rate",
|
||||
states={
|
||||
'invisible': Eval('activity_action') != 'send_email',
|
||||
})
|
||||
email_click_rate = fields.Float(
|
||||
"E-mail Click Rate",
|
||||
"Email Click Rate",
|
||||
states={
|
||||
'invisible': Eval('activity_action') != 'send_email',
|
||||
})
|
||||
email_click_through_rate = fields.Float(
|
||||
"E-mail Click-Through Rate",
|
||||
"Email Click-Through Rate",
|
||||
states={
|
||||
'invisible': Eval('activity_action') != 'send_email',
|
||||
})
|
||||
|
||||
@@ -10,10 +10,10 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<field name="text">Invalid condition "%(condition)s" in activity "%(activity)s" with exception "%(exception)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_activity_invalid_email_template">
|
||||
<field name="text">Invalid e-mail template in activity "%(activity)s" with exception "%(exception)s".</field>
|
||||
<field name="text">Invalid email template in activity "%(activity)s" with exception "%(exception)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_activity_invalid_email_title">
|
||||
<field name="text">Invalid e-mail title in activity "%(activity)s" with exception "%(exception)s".</field>
|
||||
<field name="text">Invalid email title in activity "%(activity)s" with exception "%(exception)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_activity_record_unique">
|
||||
<field name="text">Record Activity must be unique by record and activity.</field>
|
||||
|
||||
@@ -50,7 +50,7 @@ Create the running scenario::
|
||||
>>> scenario.save()
|
||||
|
||||
>>> root_activity = Activity()
|
||||
>>> root_activity.name = "First E-Mail"
|
||||
>>> root_activity.name = "First email"
|
||||
>>> root_activity.parent = scenario
|
||||
>>> root_activity.action = 'send_email'
|
||||
>>> root_activity.email_title = "Hello"
|
||||
@@ -61,26 +61,26 @@ Create the running scenario::
|
||||
>>> root_activity.save()
|
||||
|
||||
>>> email_opened = Activity()
|
||||
>>> email_opened.name = "E-Mail Opened"
|
||||
>>> email_opened.name = "Email Opened"
|
||||
>>> email_opened.parent = root_activity
|
||||
>>> email_opened.on = 'email_opened'
|
||||
>>> email_opened.save()
|
||||
|
||||
>>> email_clicked = Activity()
|
||||
>>> email_clicked.name = "E-Mail Clicked"
|
||||
>>> email_clicked.name = "Email Clicked"
|
||||
>>> email_clicked.parent = root_activity
|
||||
>>> email_clicked.on = 'email_clicked'
|
||||
>>> email_clicked.save()
|
||||
|
||||
>>> email_not_clicked = Activity()
|
||||
>>> email_not_clicked.name = "E-Mail no clicked"
|
||||
>>> email_not_clicked.name = "Email no clicked"
|
||||
>>> email_not_clicked.parent = root_activity
|
||||
>>> email_not_clicked.on = 'email_clicked_not'
|
||||
>>> email_not_clicked.delay = datetime.timedelta(days=2)
|
||||
>>> email_not_clicked.save()
|
||||
|
||||
>>> email_reminder = Activity()
|
||||
>>> email_reminder.name = "E-Mail Reminder"
|
||||
>>> email_reminder.name = "Email Reminder"
|
||||
>>> email_reminder.parent = root_activity
|
||||
>>> email_reminder.action = 'send_email'
|
||||
>>> email_reminder.email_title = "Reminder"
|
||||
|
||||
@@ -65,7 +65,7 @@ Create the running scenario::
|
||||
>>> scenario.save()
|
||||
|
||||
>>> activity = scenario.activities.new()
|
||||
>>> activity.name = "First E-Mail"
|
||||
>>> activity.name = "First email"
|
||||
>>> activity.action = 'send_email'
|
||||
>>> activity.email_title = "Pending Sale"
|
||||
>>> activity.condition = PYSONEncoder().encode(
|
||||
|
||||
@@ -16,17 +16,17 @@ web user.
|
||||
|
||||
Two actions are available:
|
||||
|
||||
- *Request Subscribe* which sends an e-mail to confirm the subscription to a
|
||||
- *Request Subscribe* which sends an email to confirm the subscription to a
|
||||
list.
|
||||
|
||||
- *Request Unsubscribe* which sends an e-mail to confirm the unsubscription of
|
||||
- *Request Unsubscribe* which sends an email to confirm the unsubscription of
|
||||
an email address from the list.
|
||||
|
||||
Message
|
||||
*******
|
||||
|
||||
It stores a message to send to all e-mails addresses on a list. A message is
|
||||
defined by:
|
||||
It stores a message to send to all emails addresses on a list.
|
||||
A message is defined by:
|
||||
|
||||
* From: the address from which the message is sent.
|
||||
* List: the list of addresses to send the message to.
|
||||
@@ -38,7 +38,7 @@ defined by:
|
||||
* Sending
|
||||
* Sent
|
||||
|
||||
A wizard is available that sends a message to a unique e-mail address from the
|
||||
A wizard is available that sends a message to a unique email address from the
|
||||
list for test purposes.
|
||||
|
||||
Configuration
|
||||
@@ -48,12 +48,12 @@ The marketing_email module uses parameters from the section:
|
||||
|
||||
- ``[marketing]``:
|
||||
|
||||
- ``email_from``: The default ``From`` for the e-mails that get sent.
|
||||
- ``email_from``: The default ``From`` for the emails that get sent.
|
||||
|
||||
- ``email_subscribe_url``: the URL to confirm the subscription to which the
|
||||
parameter ``token`` will be added.
|
||||
|
||||
- ``email_unsubscribe_url``: the URL to unsubscribe an e-mail address to
|
||||
- ``email_unsubscribe_url``: the URL to unsubscribe an email address to
|
||||
which the parameter ``token`` will be added.
|
||||
|
||||
- ``email_spy_pixel``: A boolean to activate spy pixel. Disable by default.
|
||||
|
||||
@@ -57,13 +57,13 @@ def _extract_params(url):
|
||||
|
||||
|
||||
class Email(DeactivableMixin, ModelSQL, ModelView):
|
||||
"Marketing E-mail"
|
||||
"Marketing Email"
|
||||
__name__ = 'marketing.email'
|
||||
_rec_name = 'email'
|
||||
|
||||
email = fields.Char("E-mail", required=True)
|
||||
email = fields.Char("Email", required=True)
|
||||
list_ = fields.Many2One('marketing.email.list', "List", required=True)
|
||||
email_token = fields.Char("E-mail Token", required=True)
|
||||
email_token = fields.Char("Email Token", required=True)
|
||||
web_user = fields.Function(
|
||||
fields.Many2One('web.user', "Web User"), 'get_web_user')
|
||||
party = fields.Function(
|
||||
@@ -339,7 +339,7 @@ class EmailList(DeactivableMixin, ModelSQL, ModelView):
|
||||
|
||||
|
||||
class Message(Workflow, ModelSQL, ModelView):
|
||||
"Marketing E-mail Message"
|
||||
"Marketing Email Message"
|
||||
__name__ = 'marketing.email.message'
|
||||
_rec_name = 'title'
|
||||
|
||||
@@ -529,7 +529,7 @@ class Message(Workflow, ModelSQL, ModelView):
|
||||
|
||||
|
||||
class SendTest(Wizard):
|
||||
"Send Test E-mail"
|
||||
"Send Test Email"
|
||||
__name__ = 'marketing.email.send_test'
|
||||
start = StateView(
|
||||
'marketing.email.send_test',
|
||||
@@ -557,7 +557,7 @@ class SendTest(Wizard):
|
||||
|
||||
|
||||
class SendTestView(ModelView):
|
||||
"Send Test E-mail"
|
||||
"Send Test Email"
|
||||
__name__ = 'marketing.email.send_test'
|
||||
|
||||
list_ = fields.Many2One(
|
||||
@@ -565,7 +565,7 @@ class SendTestView(ModelView):
|
||||
message = fields.Many2One(
|
||||
'marketing.email.message', "Message", readonly=True)
|
||||
email = fields.Many2One(
|
||||
'marketing.email', "E-Mail", required=True,
|
||||
'marketing.email', "Email", required=True,
|
||||
domain=[
|
||||
('list_', '=', Eval('list_')),
|
||||
])
|
||||
|
||||
@@ -21,7 +21,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_email_relate_list">
|
||||
<field name="name">E-mails</field>
|
||||
<field name="name">Emails</field>
|
||||
<field name="res_model">marketing.email</field>
|
||||
<field name="domain" eval="[('list_', '=', Eval('active_id'))]" pyson="1"/>
|
||||
</record>
|
||||
|
||||
@@ -16,7 +16,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_ir_email_form_relate_notification">
|
||||
<field name="name">E-mails</field>
|
||||
<field name="name">Emails</field>
|
||||
<field name="res_model">ir.email</field>
|
||||
<field name="domain"
|
||||
eval="[('notification_email', 'in', Eval('active_ids'))]"
|
||||
|
||||
@@ -4,7 +4,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data grouped="1">
|
||||
<record model="ir.message" id="msg_notification_invalid_subject">
|
||||
<field name="text">Invalid e-mail subject in notification "%(notification)s" with exception "%(exception)s".</field>
|
||||
<field name="text">Invalid email subject in notification "%(notification)s" with exception "%(exception)s".</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
|
||||
@@ -44,7 +44,7 @@ class Email(ModelSQL, ModelView):
|
||||
states={
|
||||
'invisible': ~Eval('recipients'),
|
||||
},
|
||||
help="User notified when no recipients e-mail is found")
|
||||
help="User notified when no recipients email is found.")
|
||||
recipients_secondary = fields.Many2One(
|
||||
'ir.model.field', "Secondary Recipients",
|
||||
domain=[
|
||||
@@ -59,7 +59,7 @@ class Email(ModelSQL, ModelView):
|
||||
states={
|
||||
'invisible': ~Eval('recipients_secondary'),
|
||||
},
|
||||
help="User notified when no secondary recipients e-mail is found")
|
||||
help="User notified when no secondary recipients email is found.")
|
||||
recipients_hidden = fields.Many2One(
|
||||
'ir.model.field', "Hidden Recipients",
|
||||
domain=[
|
||||
@@ -74,7 +74,7 @@ class Email(ModelSQL, ModelView):
|
||||
states={
|
||||
'invisible': ~Eval('recipients_hidden'),
|
||||
},
|
||||
help="User notified when no hidden recipients e-mail is found")
|
||||
help="User notified when no hidden recipients email is found.")
|
||||
|
||||
contact_mechanism = fields.Selection(
|
||||
'get_contact_mechanisms', "Contact Mechanism",
|
||||
|
||||
@@ -24,7 +24,7 @@ _TYPES = [
|
||||
('phone', 'Phone'),
|
||||
('mobile', 'Mobile'),
|
||||
('fax', 'Fax'),
|
||||
('email', 'E-Mail'),
|
||||
('email', 'Email'),
|
||||
('website', 'Website'),
|
||||
('skype', 'Skype'),
|
||||
('sip', 'SIP'),
|
||||
@@ -96,7 +96,7 @@ class ContactMechanism(
|
||||
"Leave empty for the party language."))
|
||||
languages = fields.One2Many(
|
||||
'party.contact_mechanism.language', 'contact_mechanism', "Languages")
|
||||
email = fields.Function(fields.Char('E-Mail', states={
|
||||
email = fields.Function(fields.Char('Email', states={
|
||||
'invisible': Eval('type') != 'email',
|
||||
'required': Eval('type') == 'email',
|
||||
}, depends={'value'}),
|
||||
|
||||
@@ -84,7 +84,7 @@ class Party(
|
||||
fields.Char("Fax", states=_contact_mechanism_states),
|
||||
'get_contact_mechanism', setter='set_contact_mechanism')
|
||||
email = fields.Function(
|
||||
fields.Char("E-Mail", states=_contact_mechanism_states),
|
||||
fields.Char("Email", states=_contact_mechanism_states),
|
||||
'get_contact_mechanism', setter='set_contact_mechanism')
|
||||
website = fields.Function(
|
||||
fields.Char("Website", states=_contact_mechanism_states),
|
||||
|
||||
@@ -109,7 +109,7 @@ class Carrier(metaclass=PoolMeta):
|
||||
|
||||
dpd_notification = fields.Selection([
|
||||
(None, ""),
|
||||
('email', "E-Mail"),
|
||||
('email', "Email"),
|
||||
('sms', "SMS"),
|
||||
], "Notification",
|
||||
states={
|
||||
|
||||
@@ -11,7 +11,7 @@ Web User
|
||||
|
||||
The *Web User* concept stores the details of user accounts for people who
|
||||
interact with Tryton from a website.
|
||||
Each user is identified by their e-mail address which must be unique.
|
||||
Each user is identified by their email address which must be unique.
|
||||
The email address is used when logging a user in, along with other
|
||||
authentication information, such as their password.
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data grouped="1">
|
||||
<record model="ir.message" id="msg_user_email_unique">
|
||||
<field name="text">E-mail of active web user must be unique.</field>
|
||||
<field name="text">Email of active web user must be unique.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_user_session_key_unique">
|
||||
<field name="text">Web user session key must be unique.</field>
|
||||
|
||||
@@ -73,12 +73,12 @@ class User(avatar_mixin(100), DeactivableMixin, ModelSQL, ModelView):
|
||||
_rec_name = 'email'
|
||||
|
||||
email = fields.Char(
|
||||
"E-mail",
|
||||
"Email",
|
||||
states={
|
||||
'required': Eval('active', True),
|
||||
})
|
||||
email_valid = fields.Boolean('E-mail Valid')
|
||||
email_token = fields.Char("E-mail Token", strip=False)
|
||||
email_valid = fields.Boolean('Email Valid')
|
||||
email_token = fields.Char("Email Token", strip=False)
|
||||
password_hash = fields.Char('Password Hash')
|
||||
password = fields.Function(
|
||||
fields.Char('Password'), 'get_password', setter='set_password')
|
||||
|
||||
@@ -78,7 +78,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<record model="ir.model.button" id="user_validate_email_button">
|
||||
<field name="model">web.user</field>
|
||||
<field name="name">validate_email</field>
|
||||
<field name="string">Validate E-mail</field>
|
||||
<field name="string">Validate Email</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.model.button" id="user_reset_password_button">
|
||||
|
||||
@@ -7,6 +7,6 @@ this repository contains the full copyright notices and license terms. -->
|
||||
</field>
|
||||
<field name="email_valid"/>
|
||||
<field name="party" expand="2"/>
|
||||
<button name="validate_email" string="Validate E-mail"/>
|
||||
<button name="validate_email" string="Validate Email"/>
|
||||
<button name="reset_password" string="Reset Password"/>
|
||||
</tree>
|
||||
|
||||
+1
-1
@@ -100,7 +100,7 @@ Version 5.8.0 - 2020-11-02
|
||||
* Set treeview footer sticky on bottom
|
||||
* Add get, in_ and contains methods to PYSON
|
||||
* Manage deletable and writable state
|
||||
* Support e-mail template
|
||||
* Support email template
|
||||
* Always encode CSV export in UTF-8
|
||||
* Use tempusdominus and Popper for date time picker
|
||||
* Support PYSON comparison of date and datetime
|
||||
|
||||
+1
-1
@@ -1175,7 +1175,7 @@ var Sao = {
|
||||
id: 'print',
|
||||
}, {
|
||||
shortcut: 'ctrl+shift+e',
|
||||
label: Sao.i18n.gettext('E-Mail'),
|
||||
label: Sao.i18n.gettext('Email'),
|
||||
id: 'email',
|
||||
}, {
|
||||
shortcut: 'alt+shift+tab',
|
||||
|
||||
+2
-2
@@ -99,8 +99,8 @@
|
||||
}, {
|
||||
id: 'email',
|
||||
icon: 'tryton-email',
|
||||
label: Sao.i18n.gettext('E-Mail...'),
|
||||
tooltip: Sao.i18n.gettext('Send an e-mail using the record'),
|
||||
label: Sao.i18n.gettext('Email...'),
|
||||
tooltip: Sao.i18n.gettext('Send an email using the record'),
|
||||
}, null, {
|
||||
id: 'export',
|
||||
icon: 'tryton-export',
|
||||
|
||||
+1
-1
@@ -2412,7 +2412,7 @@
|
||||
init: function(name, record, prints, template) {
|
||||
this.record = record;
|
||||
this.dialog = new Sao.Dialog(
|
||||
Sao.i18n.gettext('E-mail %1', name), 'email', 'lg');
|
||||
Sao.i18n.gettext('Email %1', name), 'email', 'lg');
|
||||
this.el = this.dialog.modal;
|
||||
this.dialog.content.addClass('form-horizontal');
|
||||
|
||||
|
||||
+2
-2
@@ -107,8 +107,8 @@ Version 5.8.0 - 2020-11-02
|
||||
* Manage symbol widget
|
||||
* Fallback to model name as title
|
||||
* Manage deletable and writable state
|
||||
* Support e-mail template
|
||||
* Send e-mail via the server
|
||||
* Support email template
|
||||
* Send email via the server
|
||||
* Support PYSON comparison of date and datetime
|
||||
* Position copied records based on order
|
||||
* Allow configuration of default colors for graph and calendar
|
||||
|
||||
@@ -323,7 +323,7 @@ Report...:
|
||||
|
||||
.. _Toolbar-Email:
|
||||
|
||||
E-Mail...:
|
||||
Email...:
|
||||
Open an editor to send an email related to the actual record.
|
||||
|
||||
.. _Toolbar-Print:
|
||||
|
||||
@@ -146,7 +146,7 @@ def populate(menu, model, record, title='', field=None, context=None):
|
||||
item.connect('activate', activate, action, atype)
|
||||
menu.show_all()
|
||||
|
||||
email_item = Gtk.MenuItem(label=_('E-Mail...'))
|
||||
email_item = Gtk.MenuItem(label=_('Email...'))
|
||||
action_menu.append(email_item)
|
||||
email_item.connect('activate', email, toolbar)
|
||||
menu.show_all()
|
||||
|
||||
@@ -106,7 +106,7 @@ class Email(NoModal):
|
||||
self.dialog.set_default_size(*self.default_size())
|
||||
self.dialog.connect('response', self.response)
|
||||
|
||||
self.dialog.set_title(_('E-mail %s') % name)
|
||||
self.dialog.set_title(_('Email %s') % name)
|
||||
|
||||
grid = Gtk.Grid(
|
||||
column_spacing=3, row_spacing=3,
|
||||
|
||||
@@ -141,8 +141,8 @@ class TabContent(InfoBar):
|
||||
accel_path='<tryton>/Form/Print'),
|
||||
ToolbarItem(
|
||||
id='email',
|
||||
label=_("_E-Mail..."),
|
||||
tooltip=_("Send an e-mail using the record"),
|
||||
label=_("_Email..."),
|
||||
tooltip=_("Send an email using the record"),
|
||||
icon_name='tryton-email',
|
||||
accel_path='<tryton>/Form/Email'),
|
||||
None,
|
||||
|
||||
+2
-2
@@ -285,8 +285,8 @@ Version 5.8.0 - 2020-11-02
|
||||
* Add record name in report filename
|
||||
* Add deletable and writable state from ir.rule to read
|
||||
* Add language attribute to data tag
|
||||
* Add e-mail template
|
||||
* Send e-mail on behalf of user
|
||||
* Add email template
|
||||
* Send email on behalf of user
|
||||
* Register mixins to generic Report class
|
||||
* Cache in memory the report template instances
|
||||
* Support Genshi's MsgDirective in report
|
||||
|
||||
@@ -10,12 +10,12 @@ a copy of the emails sent from a :class:`~trytond.model.ModelStorage` record.
|
||||
|
||||
Emails are found by opening the main menu item:
|
||||
|
||||
|Administration --> Models --> E-mails|__
|
||||
|Administration --> Models --> Emails|__
|
||||
|
||||
.. |Administration --> Models --> E-mails| replace:: :menuselection:`Administration --> Models --> E-mails`
|
||||
.. |Administration --> Models --> Emails| replace:: :menuselection:`Administration --> Models --> Emails`
|
||||
__ https://demo.tryton.org/model/ir.email
|
||||
|
||||
The emails related to a record are found by opening the :guilabel:`E-mails
|
||||
The emails related to a record are found by opening the :guilabel:`Emails
|
||||
Archives` menu item from the relate toolbar.
|
||||
|
||||
.. _model-ir.email.template:
|
||||
@@ -24,13 +24,13 @@ Email Template
|
||||
==============
|
||||
|
||||
The *Email Template* stores templates per `Model <model-ir.model>` and is used
|
||||
to fill in the client's E-mail form.
|
||||
to fill in the client's Email form.
|
||||
|
||||
.. seealso::
|
||||
|
||||
Email Templates are found by opening the main menu item:
|
||||
|
||||
|Administration --> User Interface --> Actions --> E-mail Templates|__
|
||||
|Administration --> User Interface --> Actions --> Email Templates|__
|
||||
|
||||
.. |Administration --> User Interface --> Actions --> E-mail Templates| replace:: :menuselection:`Administration --> User Interface --> Actions --> E-mail Templates`
|
||||
.. |Administration --> User Interface --> Actions --> Email Templates| replace:: :menuselection:`Administration --> User Interface --> Actions --> Email Templates`
|
||||
__ https://demo.tryton.org/model/ir.email.template
|
||||
|
||||
@@ -15,7 +15,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_email_form">
|
||||
<field name="name">E-mails</field>
|
||||
<field name="name">Emails</field>
|
||||
<field name="res_model">ir.email</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_email_form_view1">
|
||||
@@ -43,7 +43,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_email_form_relate">
|
||||
<field name="name">E-mail Archives</field>
|
||||
<field name="name">Email Archives</field>
|
||||
<field name="res_model">ir.email</field>
|
||||
<field
|
||||
name="domain"
|
||||
@@ -77,7 +77,7 @@ this repository contains the full copyright notices and license terms. -->
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_email_template_form">
|
||||
<field name="name">E-mail Templates</field>
|
||||
<field name="name">Email Templates</field>
|
||||
<field name="res_model">ir.email.template</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_email_template_form_view1">
|
||||
|
||||
@@ -234,7 +234,7 @@ class EmailAddress(ModelSQL):
|
||||
__name__ = 'ir.email.address'
|
||||
|
||||
email = fields.Many2One(
|
||||
'ir.email', "E-mail", required=True, ondelete='CASCADE')
|
||||
'ir.email', "Email", required=True, ondelete='CASCADE')
|
||||
address = fields.Char("Address", required=True)
|
||||
|
||||
|
||||
|
||||
@@ -379,16 +379,16 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<field name="text">You are not allowed to execute wizard "%(wizard)s" on "%(model)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_email_template_invalid_subject">
|
||||
<field name="text">Invalid subject in e-mail template "%(template)s" with exception "%(exception)s".</field>
|
||||
<field name="text">Invalid subject in email template "%(template)s" with exception "%(exception)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_email_template_invalid_body">
|
||||
<field name="text">Invalid body in e-mail template "%(template)s" with exception "%(exception)s".</field>
|
||||
<field name="text">Invalid body in email template "%(template)s" with exception "%(exception)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_email_template_invalid_field_pyson">
|
||||
<field name="text">Invalid PYSON %(field)s in e-mail template "%(template)s" with exception "%(exception)s".</field>
|
||||
<field name="text">Invalid PYSON %(field)s in email template "%(template)s" with exception "%(exception)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_email_template_invalid_field_pyson_type">
|
||||
<field name="text">The PYSON %(field)s in e-mail template "%(template)s" must generate a list.</field>
|
||||
<field name="text">The PYSON %(field)s in email template "%(template)s" must generate a list.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_avatar_resource_unique">
|
||||
<field name="text">Only one avatar is allowed per resource.</field>
|
||||
|
||||
Reference in New Issue
Block a user