[IMP] mail: Return a browse record in _track_subtype instead of xmlid
Purpose ======= It's possible to gain some requests with returning a browse record instead of an xmlid. It's also cleaner.
This commit is contained in:
@@ -1493,11 +1493,11 @@ class AccountInvoice(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'state' in init_values and self.state == 'paid' and self.type in ('out_invoice', 'out_refund'):
|
||||
return 'account.mt_invoice_paid'
|
||||
return self.env.ref('account.mt_invoice_paid')
|
||||
elif 'state' in init_values and self.state == 'open' and self.type in ('out_invoice', 'out_refund'):
|
||||
return 'account.mt_invoice_validated'
|
||||
return self.env.ref('account.mt_invoice_validated')
|
||||
elif 'state' in init_values and self.state == 'draft' and self.type in ('out_invoice', 'out_refund'):
|
||||
return 'account.mt_invoice_created'
|
||||
return self.env.ref('account.mt_invoice_created')
|
||||
return super(AccountInvoice, self)._track_subtype(init_values)
|
||||
|
||||
def _amount_by_group(self):
|
||||
|
||||
@@ -390,7 +390,7 @@ class AccountVoucher(models.Model):
|
||||
@api.multi
|
||||
def _track_subtype(self, init_values):
|
||||
if 'state' in init_values:
|
||||
return 'account_voucher.mt_voucher_state_change'
|
||||
return self.env.ref('account_voucher.mt_voucher_state_change')
|
||||
return super(AccountVoucher, self)._track_subtype(init_values)
|
||||
|
||||
|
||||
|
||||
@@ -1095,13 +1095,13 @@ class Lead(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'stage_id' in init_values and self.probability == 100 and self.stage_id and self.stage_id.on_change:
|
||||
return 'crm.mt_lead_won'
|
||||
return self.env.ref('crm.mt_lead_won')
|
||||
elif 'active' in init_values and self.probability == 0 and not self.active:
|
||||
return 'crm.mt_lead_lost'
|
||||
return self.env.ref('crm.mt_lead_lost')
|
||||
elif 'stage_id' in init_values and self.stage_id and self.stage_id.sequence <= 1:
|
||||
return 'crm.mt_lead_create'
|
||||
return self.env.ref('crm.mt_lead_create')
|
||||
elif 'stage_id' in init_values:
|
||||
return 'crm.mt_lead_stage'
|
||||
return self.env.ref('crm.mt_lead_stage')
|
||||
return super(Lead, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -268,7 +268,7 @@ class FleetVehicle(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'driver_id' in init_values:
|
||||
return 'fleet.mt_fleet_driver_updated'
|
||||
return self.env.ref('fleet.mt_fleet_driver_updated')
|
||||
return super(FleetVehicle, self)._track_subtype(init_values)
|
||||
|
||||
def open_assignation_logs(self):
|
||||
|
||||
@@ -128,7 +128,7 @@ class Contract(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'state' in init_values and self.state == 'pending':
|
||||
return 'hr_contract.mt_contract_pending'
|
||||
return self.env.ref('hr_contract.mt_contract_pending')
|
||||
elif 'state' in init_values and self.state == 'close':
|
||||
return 'hr_contract.mt_contract_close'
|
||||
return self.env.ref('hr_contract.mt_contract_close')
|
||||
return super(Contract, self)._track_subtype(init_values)
|
||||
|
||||
@@ -595,11 +595,11 @@ class HrExpenseSheet(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'state' in init_values and self.state == 'approve':
|
||||
return 'hr_expense.mt_expense_approved'
|
||||
return self.env.ref('hr_expense.mt_expense_approved')
|
||||
elif 'state' in init_values and self.state == 'cancel':
|
||||
return 'hr_expense.mt_expense_refused'
|
||||
return self.env.ref('hr_expense.mt_expense_refused')
|
||||
elif 'state' in init_values and self.state == 'done':
|
||||
return 'hr_expense.mt_expense_paid'
|
||||
return self.env.ref('hr_expense.mt_expense_paid')
|
||||
return super(HrExpenseSheet, self)._track_subtype(init_values)
|
||||
|
||||
def _message_auto_subscribe_followers(self, updated_values, subtype_ids):
|
||||
|
||||
@@ -760,9 +760,9 @@ class HolidaysRequest(models.Model):
|
||||
@api.multi
|
||||
def _track_subtype(self, init_values):
|
||||
if 'state' in init_values and self.state == 'validate':
|
||||
return 'hr_holidays.mt_leave_approved'
|
||||
return self.env.ref('hr_holidays.mt_leave_approved')
|
||||
elif 'state' in init_values and self.state == 'refuse':
|
||||
return 'hr_holidays.mt_leave_refused'
|
||||
return self.env.ref('hr_holidays.mt_leave_refused')
|
||||
return super(HolidaysRequest, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -544,9 +544,9 @@ class HolidaysAllocation(models.Model):
|
||||
@api.multi
|
||||
def _track_subtype(self, init_values):
|
||||
if 'state' in init_values and self.state == 'validate':
|
||||
return 'hr_holidays.mt_leave_allocation_approved'
|
||||
return self.env.ref('hr_holidays.mt_leave_allocation_approved')
|
||||
elif 'state' in init_values and self.state == 'refuse':
|
||||
return 'hr_holidays.mt_leave_allocation_refused'
|
||||
return self.env.ref('hr_holidays.mt_leave_allocation_refused')
|
||||
return super(HolidaysAllocation, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -65,7 +65,7 @@ class MaintenanceEquipment(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if ('employee_id' in init_values and self.employee_id) or ('department_id' in init_values and self.department_id):
|
||||
return 'maintenance.mt_mat_assign'
|
||||
return self.env.ref('maintenance.mt_mat_assign')
|
||||
return super(MaintenanceEquipment, self)._track_subtype(init_values)
|
||||
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ class Job(models.Model):
|
||||
@api.multi
|
||||
def _track_subtype(self, init_values):
|
||||
if 'state' in init_values and self.state == 'open':
|
||||
return 'hr_recruitment.mt_job_new'
|
||||
return self.env.ref('hr_recruitment.mt_job_new')
|
||||
return super(Job, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -346,11 +346,11 @@ class Applicant(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
record = self[0]
|
||||
if 'emp_id' in init_values and record.emp_id and record.emp_id.active:
|
||||
return 'hr_recruitment.mt_applicant_hired'
|
||||
return self.env.ref('hr_recruitment.mt_applicant_hired')
|
||||
elif 'stage_id' in init_values and record.stage_id and record.stage_id.sequence <= 1:
|
||||
return 'hr_recruitment.mt_applicant_new'
|
||||
return self.env.ref('hr_recruitment.mt_applicant_new')
|
||||
elif 'stage_id' in init_values and record.stage_id and record.stage_id.sequence > 1:
|
||||
return 'hr_recruitment.mt_applicant_stage_changed'
|
||||
return self.env.ref('hr_recruitment.mt_applicant_stage_changed')
|
||||
return super(Applicant, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -562,7 +562,7 @@ class MailThread(models.AbstractModel):
|
||||
:param init_values: the original values of the record; only modified fields
|
||||
are present in the dict
|
||||
:type init_values: dict
|
||||
:returns: a subtype xml_id or False if no subtype is trigerred
|
||||
:returns: a subtype browse record or False if no subtype is trigerred
|
||||
"""
|
||||
return False
|
||||
|
||||
@@ -635,17 +635,16 @@ class MailThread(models.AbstractModel):
|
||||
continue
|
||||
|
||||
# find subtypes and post messages or log if no subtype found
|
||||
subtype_xmlid = False
|
||||
subtype = False
|
||||
# By passing this key, that allows to let the subtype empty and so don't sent email because partners_to_notify from mail_message._notify will be empty
|
||||
if not self._context.get('mail_track_log_only'):
|
||||
subtype_xmlid = record._track_subtype(dict((col_name, initial_values[record.id][col_name]) for col_name in changes))
|
||||
subtype = record._track_subtype(dict((col_name, initial_values[record.id][col_name]) for col_name in changes))
|
||||
|
||||
if subtype_xmlid:
|
||||
subtype_rec = self.env.ref(subtype_xmlid) # TDE FIXME check for raise if not found
|
||||
if not (subtype_rec and subtype_rec.exists()):
|
||||
_logger.debug('subtype %s not found' % subtype_xmlid)
|
||||
if subtype:
|
||||
if not subtype.exists():
|
||||
_logger.debug('subtype "%s" not found' % subtype.name)
|
||||
continue
|
||||
record.message_post(subtype=subtype_xmlid, tracking_value_ids=tracking_value_ids)
|
||||
record.message_post(subtype_id=subtype.id, tracking_value_ids=tracking_value_ids)
|
||||
elif tracking_value_ids:
|
||||
record._message_log(tracking_value_ids=tracking_value_ids)
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ class MaintenanceEquipment(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'owner_user_id' in init_values and self.owner_user_id:
|
||||
return 'maintenance.mt_mat_assign'
|
||||
return self.env.ref('maintenance.mt_mat_assign')
|
||||
return super(MaintenanceEquipment, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
@@ -267,9 +267,9 @@ class MaintenanceRequest(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'stage_id' in init_values and self.stage_id.sequence <= 1:
|
||||
return 'maintenance.mt_req_created'
|
||||
return self.env.ref('maintenance.mt_req_created')
|
||||
elif 'stage_id' in init_values and self.stage_id.sequence > 1:
|
||||
return 'maintenance.mt_req_status'
|
||||
return self.env.ref('maintenance.mt_req_status')
|
||||
return super(MaintenanceRequest, self)._track_subtype(init_values)
|
||||
|
||||
def _get_default_team_id(self):
|
||||
|
||||
@@ -775,13 +775,13 @@ class Task(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'kanban_state_label' in init_values and self.kanban_state == 'blocked':
|
||||
return 'project.mt_task_blocked'
|
||||
return self.env.ref('project.mt_task_blocked')
|
||||
elif 'kanban_state_label' in init_values and self.kanban_state == 'done':
|
||||
return 'project.mt_task_ready'
|
||||
return self.env.ref('project.mt_task_ready')
|
||||
elif 'stage_id' in init_values and self.stage_id and self.stage_id.sequence <= 1: # start stage -> new
|
||||
return 'project.mt_task_new'
|
||||
return self.env.ref('project.mt_task_new')
|
||||
elif 'stage_id' in init_values:
|
||||
return 'project.mt_task_stage'
|
||||
return self.env.ref('project.mt_task_stage')
|
||||
return super(Task, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -179,11 +179,11 @@ class PurchaseOrder(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'state' in init_values and self.state == 'purchase':
|
||||
return 'purchase.mt_rfq_approved'
|
||||
return self.env.ref('purchase.mt_rfq_approved')
|
||||
elif 'state' in init_values and self.state == 'to approve':
|
||||
return 'purchase.mt_rfq_confirmed'
|
||||
return self.env.ref('purchase.mt_rfq_confirmed')
|
||||
elif 'state' in init_values and self.state == 'done':
|
||||
return 'purchase.mt_rfq_done'
|
||||
return self.env.ref('purchase.mt_rfq_done')
|
||||
return super(PurchaseOrder, self)._track_subtype(init_values)
|
||||
|
||||
@api.onchange('partner_id', 'company_id')
|
||||
|
||||
@@ -272,9 +272,9 @@ class SaleOrder(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'state' in init_values and self.state == 'sale':
|
||||
return 'sale.mt_order_confirmed'
|
||||
return self.env.ref('sale.mt_order_confirmed')
|
||||
elif 'state' in init_values and self.state == 'sent':
|
||||
return 'sale.mt_order_sent'
|
||||
return self.env.ref('sale.mt_order_sent')
|
||||
return super(SaleOrder, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -73,7 +73,7 @@ class LandedCost(models.Model):
|
||||
@api.multi
|
||||
def _track_subtype(self, init_values):
|
||||
if 'state' in init_values and self.state == 'done':
|
||||
return 'stock_landed_costs.mt_stock_landed_cost_open'
|
||||
return self.env.ref('stock_landed_costs.mt_stock_landed_cost_open')
|
||||
return super(LandedCost, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -106,7 +106,7 @@ class StockPickingBatch(models.Model):
|
||||
|
||||
def _track_subtype(self, init_values):
|
||||
if 'state' in init_values:
|
||||
return 'stock_picking_batch.mt_batch_state'
|
||||
return self.env.ref('stock_picking_batch.mt_batch_state')
|
||||
return super(StockPickingBatch, self)._track_subtype(init_values)
|
||||
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ class MailTestFull(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'umbrella_id' in init_values and self.umbrella_id:
|
||||
return 'test_mail.st_mail_test_full_umbrella_upd'
|
||||
return self.env.ref('test_mail.st_mail_test_full_umbrella_upd')
|
||||
return super(MailTestFull, self)._track_subtype(init_values)
|
||||
|
||||
|
||||
|
||||
@@ -118,9 +118,9 @@ class Event(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'is_published' in init_values and self.is_published:
|
||||
return 'website_event.mt_event_published'
|
||||
return self.env.ref('website_event.mt_event_published')
|
||||
elif 'is_published' in init_values and not self.is_published:
|
||||
return 'website_event.mt_event_unpublished'
|
||||
return self.env.ref('website_event.mt_event_unpublished')
|
||||
return super(Event, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -151,9 +151,9 @@ class Track(models.Model):
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'kanban_state' in init_values and self.kanban_state == 'blocked':
|
||||
return 'website_event_track.mt_track_blocked'
|
||||
return self.env.ref('website_event_track.mt_track_blocked')
|
||||
elif 'kanban_state' in init_values and self.kanban_state == 'done':
|
||||
return 'website_event_track.mt_track_ready'
|
||||
return self.env.ref('website_event_track.mt_track_ready')
|
||||
return super(Track, self)._track_subtype(init_values)
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -331,7 +331,7 @@ can override the ``_track_subtype()`` function:
|
||||
# in cache
|
||||
self.ensure_one()
|
||||
if 'state' in init_values and self.state == 'confirmed':
|
||||
return 'my_module.mt_state_change' # Full external id
|
||||
return self.env.ref('my_module.mt_state_change')
|
||||
return super(BusinessTrip, self)._track_subtype(init_values)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user