[IMP] various: update alias management in views
PURPOSE Allow alias domains to be multiple, notably to be used in a multi company environment where each company has its own alias domain. SPECIFICATIONS Update fields used in form views. Use 'alias_domain_id' instead of domain that is now simply a related on 'alias_domain_id.name'. To ease UI we add a placeholder on this field as it is now writable e.g. in multi domains environment. Avoid unwanted configuration change by making it generally no_open / no_create_edit. In project, remove an unnecessary field adding complexity for few real use case now that aliases are more open to configuration. Task-36879 (Mail: Support Multi Domains Aliases) Part-of: odoo/odoo#76734
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
<field name="kanban_dashboard"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="activity_state"/>
|
||||
<field name="alias_domain"/>
|
||||
<field name="alias_domain_id"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="d-flex flex-column flex-fill">
|
||||
@@ -45,7 +45,7 @@
|
||||
<span groups="base.group_multi_company" class="small">- <field name="company_id"/></span>
|
||||
</t>
|
||||
</div>
|
||||
<div class="o_secondary" t-att-title="dashboard.title" t-if="journal_type == 'purchase' && record.alias_domain.raw_value">
|
||||
<div class="o_secondary" t-att-title="dashboard.title" t-if="journal_type == 'purchase' && record.alias_domain_id.raw_value">
|
||||
<field name="alias_id"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -143,18 +143,25 @@
|
||||
<field name="restrict_mode_hash_table" groups="account.group_account_readonly" invisible="type in ['bank', 'cash']"/>
|
||||
</group>
|
||||
<!-- email alias -->
|
||||
<group class="oe_read_only" name="group_alias_ro" string="Create Invoices upon Emails" invisible="type not in ('sale', 'purchase') or not alias_domain">
|
||||
<group class="oe_read_only" name="group_alias_ro"
|
||||
string="Create Invoices upon Emails" invisible="type not in ('sale', 'purchase')">
|
||||
<field name="alias_id"/>
|
||||
</group>
|
||||
<group name="group_alias_no_domain" string="Create Invoices upon Emails" invisible="type not in ('sale', 'purchase') or alias_domain">
|
||||
<group name="group_alias_no_domain" string="Create Invoices upon Emails"
|
||||
invisible="type not in ('sale', 'purchase') or alias_domain_id">
|
||||
<div class="content-group" colspan="2">
|
||||
<a type='action' name='%(action_open_settings)d' class="btn btn-link" role="button"><i class="oi oi-fw o_button_icon oi-arrow-right"/> Configure Email Servers</a>
|
||||
<a type='action' name='%(action_open_settings)d' class="btn btn-link" role="button">
|
||||
<i class="oi oi-fw o_button_icon oi-arrow-right"/> Choose or Configure Email Servers
|
||||
</a>
|
||||
</div>
|
||||
</group>
|
||||
<group class="oe_edit_only" name="group_alias_edit" string="Create Invoices upon Emails" invisible="type not in ('sale', 'purchase') or not alias_domain">
|
||||
<group class="oe_edit_only" name="group_alias_edit" string="Create Invoices upon Emails"
|
||||
invisible="type not in ('sale', 'purchase') or not alias_domain_id">
|
||||
<label string="Email Alias" for="alias_name"/>
|
||||
<div class="oe_inline" name="edit_alias" style="display: inline;" >
|
||||
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
<field name="alias_name" class="oe_inline"/>@
|
||||
<field name="alias_domain_id" class="oe_inline" placeholder="e.g. domain.com"
|
||||
options="{'no_create': True, 'no_open': True}"/>
|
||||
</div>
|
||||
</group>
|
||||
<!-- edi -->
|
||||
|
||||
@@ -159,18 +159,13 @@
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='user_id']" position="after">
|
||||
<label for="alias_name" string="Email Alias"
|
||||
invisible="not use_leads and not use_opportunities"/>
|
||||
<div class="oe_inline" name="alias_def"
|
||||
invisible="not use_leads and not use_opportunities">
|
||||
<field name="alias_id" class="oe_read_only oe_inline"
|
||||
string="Email Alias"
|
||||
required="0"
|
||||
invisible="not alias_domain"/>
|
||||
<div class="oe_inline" name="edit_alias" style="display: inline;" >
|
||||
<div class="oe_edit_only" invisible="not alias_domain">
|
||||
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
</div>
|
||||
<button icon="oi-arrow-right" type="action" name="%(base_setup.action_general_configuration)d" string="Configure a custom domain" class="p-0 btn-link" invisible="alias_domain"/>
|
||||
invisible="not use_leads and not use_opportunities"/>
|
||||
<div name="alias_def" invisible="not use_leads and not use_opportunities">
|
||||
<field name="alias_id" string="Email Alias" class="oe_read_only" required="0"/>
|
||||
<div class="oe_edit_only" name="edit_alias">
|
||||
<field name="alias_name" class="oe_inline"/>@
|
||||
<field name="alias_domain_id" class="oe_inline" placeholder="e.g. domain.com"
|
||||
options="{'no_create': True, 'no_open': True}"/>
|
||||
</div>
|
||||
</div>
|
||||
<field name="alias_contact"
|
||||
|
||||
@@ -14,8 +14,7 @@
|
||||
<kanban class="o_kanban_dashboard o_hr_recruitment_kanban" on_create="hr_recruitment.create_job_simple" sample="1" limit="40" action="%(action_hr_job_applications)d" type="action">
|
||||
<field name="active"/>
|
||||
<field name="name"/>
|
||||
<field name="alias_name"/>
|
||||
<field name="alias_domain"/>
|
||||
<field name="alias_email"/>
|
||||
<field name="is_favorite"/>
|
||||
<field name="department_id"/>
|
||||
<field name="no_of_recruitment"/>
|
||||
@@ -86,7 +85,7 @@
|
||||
<div class="ps-3 o_secondary" groups="base.group_multi_company">
|
||||
<small><i class="fa fa-building-o" role="img" aria-label="Company" title="Company"></i> <field name="company_id"/></small>
|
||||
</div>
|
||||
<div t-if="record.alias_name.value and record.alias_domain.value" class="ps-3 o_secondary o_job_alias">
|
||||
<div t-if="record.alias_email.value" class="ps-3 o_secondary o_job_alias">
|
||||
<small><i class="fa fa-envelope-o" role="img" aria-label="Alias" title="Alias"></i> <field name="alias_id"/></small>
|
||||
</div>
|
||||
</div>
|
||||
@@ -146,13 +145,16 @@
|
||||
<form string="Create a Job Position" class="o_hr_job_simple_form" >
|
||||
<group>
|
||||
<field name="name" class="o_job_name oe_inline" placeholder="e.g. Sales Manager"/>
|
||||
<label for="alias_name" string="Application email" invisible="not alias_domain" help="Define a specific contact address for this job position. If you keep it empty, the default email address will be used which is in human resources settings"/>
|
||||
<div name="alias_def" invisible="not alias_domain">
|
||||
<label for="alias_name" string="Application email"
|
||||
help="Define a specific contact address for this job position. If you keep it empty, the default email address will be used which is in human resources settings"/>
|
||||
<div name="alias_def">
|
||||
<field name="alias_id" class="oe_read_only" string="Email Alias" required="0"/>
|
||||
<div class="oe_edit_only" name="edit_alias">
|
||||
<field name="alias_name" class="oe_inline o_job_alias" placeholder="e.g. sales-manager"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
<field name="alias_name" class="oe_inline o_job_alias" placeholder="e.g. sales-manager"/>@
|
||||
<field name="alias_domain_id" class="oe_inline" placeholder="e.g. domain.com"
|
||||
options="{'no_create': True, 'no_open': True}"/>
|
||||
</div>
|
||||
<div class="text-muted" invisible="not alias_domain">Applicants can send resume to this email address,<br/>it will create an application automatically</div>
|
||||
<div class="text-muted">Applicants can send resume to this email address,<br/>it will create an application automatically</div>
|
||||
</div>
|
||||
</group>
|
||||
<footer>
|
||||
@@ -187,11 +189,14 @@
|
||||
<span invisible="address_id" class="oe_read_only">Remote</span>
|
||||
<field name="address_id" context="{'show_address': 1}" placeholder="Remote"/>
|
||||
</div>
|
||||
<label for="alias_name" string="Email Alias" invisible="not alias_domain" help="Define a specific contact address for this job position. If you keep it empty, the default email address will be used which is in human resources settings"/>
|
||||
<div name="alias_def" invisible="not alias_domain">
|
||||
<label for="alias_name" string="Email Alias"
|
||||
help="Define a specific contact address for this job position. If you keep it empty, the default email address will be used which is in human resources settings"/>
|
||||
<div name="alias_def">
|
||||
<field name="alias_id" class="oe_read_only" string="Email Alias" required="0"/>
|
||||
<div class="oe_edit_only" name="edit_alias">
|
||||
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
<field name="alias_name" class="oe_inline"/>@
|
||||
<field name="alias_domain_id" class="oe_inline" placeholder="e.g. domain.com"
|
||||
options="{'no_create': True, 'no_open': True}"/>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
|
||||
@@ -109,15 +109,16 @@
|
||||
<field name="active" invisible="1"/>
|
||||
<label for="alias_name" string="Email Alias"/>
|
||||
<div class="oe_inline" name="alias_def">
|
||||
<field name="alias_id" class="oe_read_only oe_inline"
|
||||
string="Email Alias"
|
||||
required="0"
|
||||
invisible="not alias_domain"/>
|
||||
<div class="oe_inline" name="edit_alias" style="display: inline;" >
|
||||
<div class="oe_edit_only" invisible="not alias_domain">
|
||||
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
<field name="alias_id" class="oe_read_only oe_inline" string="Email Alias" required="0"/>
|
||||
<div class="oe_inline" name="edit_alias" style="display: inline;">
|
||||
<div class="oe_edit_only">
|
||||
<field name="alias_name" class="oe_inline"/>@
|
||||
<field name="alias_domain_id" class="oe_inline" placeholder="e.g. domain.com"
|
||||
options="{'no_create': True, 'no_open': True}"/>
|
||||
</div>
|
||||
<button icon="oi-arrow-right" type="action" name="%(base_setup.action_general_configuration)d" string="Configure a custom domain" class="p-0 btn-link" invisible="alias_domain"/>
|
||||
<button icon="oi-arrow-right" type="action" name="%(base_setup.action_general_configuration)d"
|
||||
string="Choose or configure a custom domain" class="p-0 btn-link"
|
||||
invisible="alias_domain_id"/>
|
||||
</div>
|
||||
</div>
|
||||
<field name="description"/>
|
||||
@@ -163,7 +164,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Mail group">
|
||||
<field name="name"/>
|
||||
<field name="alias_name"/>
|
||||
<field name="alias_email"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="archived" domain="[('active', '=', False)]"/>
|
||||
<filter string="Moderated" name="moderation" domain="[('moderation', '=', True)]"/>
|
||||
|
||||
@@ -667,12 +667,14 @@
|
||||
<field name="technician_user_id" class="oe_inline" domain="[('share', '=', False)]"/>
|
||||
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}" class="oe_inline"/>
|
||||
</group>
|
||||
<group name="group_alias" invisible="not alias_domain" groups="base.group_no_one">
|
||||
<group name="group_alias">
|
||||
<label for="alias_name" string="Email Alias"/>
|
||||
<div name="alias_def">
|
||||
<field name="alias_id" class="oe_read_only oe_inline" string="Email Alias" required="0"/>
|
||||
<div class="oe_edit_only oe_inline" name="edit_alias" style="display: inline;">
|
||||
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
<field name="alias_name" class="oe_inline"/>@
|
||||
<field name="alias_domain_id" class="oe_inline" placeholder="e.g. domain.com"
|
||||
options="{'no_create': True, 'no_open': True}"/>
|
||||
</div>
|
||||
</div>
|
||||
</group>
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<field name="group_id" ref="project.group_project_user"/>
|
||||
<field name="tip_description" type="html">
|
||||
<div>
|
||||
<t t-set="project_record" t-value="object.env['project.project'].search([('alias_name', '!=', False)], limit=1, order='sequence asc')"/>
|
||||
<t t-set="project_record" t-value="object.env['project.project'].search([('alias_name', '!=', False), ('alias_domain_id', '!=', False)], limit=1, order='sequence asc')"/>
|
||||
<p class="tip_title">Tip: Create tasks from incoming emails</p>
|
||||
<t t-if="project_record.alias_email">
|
||||
<p class="tip_content">Emails sent to <a t-attf-href="mailto:{{project_record.alias_email}}" target="_blank" style="color: #875a7b; text-decoration: none;"><t t-out="project_record.alias_email" /></a> will generate tasks in your <t t-out="project_record.name"></t> project.</p>
|
||||
|
||||
@@ -136,7 +136,6 @@ class Project(models.Model):
|
||||
domain=[('state', 'not in', list(CLOSED_STATES))])
|
||||
color = fields.Integer(string='Color Index')
|
||||
user_id = fields.Many2one('res.users', string='Project Manager', default=lambda self: self.env.user, tracking=True)
|
||||
alias_enabled = fields.Boolean(string='Use Email Alias', compute='_compute_alias_enabled', readonly=False)
|
||||
alias_id = fields.Many2one(help="Internal email associated with this project. Incoming emails are automatically synchronized "
|
||||
"with Tasks (or optionally Issues if the Issue Tracker module is installed).")
|
||||
privacy_visibility = fields.Selection([
|
||||
@@ -215,11 +214,6 @@ class Project(models.Model):
|
||||
('project_date_greater', 'check(date >= date_start)', "The project's start date must be before its end date.")
|
||||
]
|
||||
|
||||
@api.onchange('alias_enabled')
|
||||
def _onchange_alias_name(self):
|
||||
if not self.alias_enabled:
|
||||
self.alias_name = False
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _onchange_company_id(self):
|
||||
if (self.env.user.has_group('project.group_project_stages') and self.stage_id.company_id
|
||||
@@ -230,10 +224,6 @@ class Project(models.Model):
|
||||
limit=1,
|
||||
).id
|
||||
|
||||
def _compute_alias_enabled(self):
|
||||
for project in self:
|
||||
project.alias_enabled = bool(project.alias_email)
|
||||
|
||||
def _compute_access_url(self):
|
||||
super(Project, self)._compute_access_url()
|
||||
for project in self:
|
||||
|
||||
@@ -108,19 +108,20 @@
|
||||
</span>
|
||||
</group>
|
||||
<group>
|
||||
<div name="alias_def" colspan="2" class="pb-2" invisible="not alias_domain">
|
||||
<div name="alias_def" colspan="2" class="pb-2">
|
||||
<!-- Always display the whole alias in edit mode. It depends in read only -->
|
||||
<field name="alias_enabled" invisible="1"/>
|
||||
<label for="alias_name" class="fw-bold o_form_label" string="Create tasks by sending an email to"/>
|
||||
<field name="alias_email" class="oe_read_only d-inline" widget="email" readonly="1" invisible="not alias_name" />
|
||||
<span class="oe_edit_only o_row">
|
||||
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
<field name="alias_name" class="oe_inline"/>@
|
||||
<field name="alias_domain_id" class="oe_inline" placeholder="e.g. domain.com"
|
||||
options="{'no_create': True, 'no_open': True}"/>
|
||||
</span>
|
||||
</div>
|
||||
<!-- the alias contact must appear when the user start typing and it must disappear
|
||||
when the string is deleted. -->
|
||||
<field name="alias_contact" class="oe_inline" string="Accept Emails From"
|
||||
invisible="alias_name == '' or not alias_name"/>
|
||||
invisible="not alias_email"/>
|
||||
</group>
|
||||
<group name="extra_settings">
|
||||
</group>
|
||||
@@ -335,11 +336,12 @@
|
||||
</div>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<div class="row o_settings_container"/>
|
||||
<div name="alias_def" class="mt-4" colspan="2" invisible="not alias_domain">
|
||||
<div name="alias_def" class="mt-4" colspan="2">
|
||||
<label for="alias_name" string="Create tasks by sending an email to"/>
|
||||
<field name="alias_enabled" invisible="1"/>
|
||||
<span>
|
||||
<field name="alias_name" placeholder="e.g. office-party"/>@<field name="alias_domain"/>
|
||||
<field name="alias_name" placeholder="e.g. office-party"/>@
|
||||
<field name="alias_domain_id" class="oe_inline" placeholder="e.g. domain.com"
|
||||
options="{'no_create': True, 'no_open': True}"/>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
@@ -392,8 +394,6 @@
|
||||
<field name="allow_milestones"/>
|
||||
<field name="label_tasks"/>
|
||||
<field name="alias_email"/>
|
||||
<field name="alias_name"/>
|
||||
<field name="alias_domain"/>
|
||||
<field name="is_favorite"/>
|
||||
<field name="rating_count" />
|
||||
<field name="rating_avg"/>
|
||||
|
||||
Reference in New Issue
Block a user