diff --git a/addons/sale/__manifest__.py b/addons/sale/__manifest__.py index ca5786aefe9..9a84cb0564a 100644 --- a/addons/sale/__manifest__.py +++ b/addons/sale/__manifest__.py @@ -26,6 +26,7 @@ This module contains all the common features of Sales Management and eCommerce. 'views/account_invoice_views.xml', 'views/sales_team_views.xml', 'views/res_partner_views.xml', + 'views/mail_activity_views.xml', 'views/assets.xml', 'views/sale_portal_templates.xml', 'views/sale_layout_category_view.xml', diff --git a/addons/sale/data/mail_data.xml b/addons/sale/data/mail_data.xml index 238bb55d2f2..5c9d0b6a2e5 100644 --- a/addons/sale/data/mail_data.xml +++ b/addons/sale/data/mail_data.xml @@ -1,6 +1,13 @@ + + + Order Upsell + fa-line-chart + + + Quotation sent diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py index 5758e50f72b..0461dbadfdd 100644 --- a/addons/sale/models/sale.py +++ b/addons/sale/models/sale.py @@ -289,6 +289,31 @@ class SaleOrder(models.Model): result = super(SaleOrder, self).create(vals) return result + @api.multi + def _write(self, values): + """ Override of private write method in order to generate activities + based in the invoice status. As the invoice status is a computed field + triggered notably when its lines and linked invoice status changes the + flow does not necessarily goes through write if the action was not done + on the SO itself. We hence override the _write to catch the computation + of invoice_status field. """ + if self.env.context.get('mail_activity_automation_skip'): + return super(SaleOrder, self)._write(values) + + res = super(SaleOrder, self)._write(values) + if 'invoice_status' in values: + self.activity_unlink(['sale.mail_act_sale_upsell']) + if values['invoice_status'] == 'upselling': + for order in self: + order.activity_schedule( + 'sale.mail_act_sale_upsell', fields.Date.today(), + user_id=order.user_id.id, + note=_("Upsell %s for customer %s") % ( + order._name, order.id, order.name, + order.partner_id._name, order.partner_id.id, order.partner_id.display_name)) + + return res + @api.multi def copy_data(self, default=None): if default is None: diff --git a/addons/sale/security/ir.model.access.csv b/addons/sale/security/ir.model.access.csv index 1a559ba8f4c..61ff1649721 100644 --- a/addons/sale/security/ir.model.access.csv +++ b/addons/sale/security/ir.model.access.csv @@ -55,3 +55,4 @@ access_account_tax_group_sale_manager,account.tax.group sale manager,account.mod access_account_account_sale_manager,account.account sale manager,account.model_account_account,sales_team.group_sale_manager,1,0,0,0 access_report_all_channels_sales_salesman,report.all.channels.sales,model_report_all_channels_sales,sales_team.group_sale_salesman,1,1,1,0 access_report_all_channels_sales_manager,report.all.channels.sales,model_report_all_channels_sales,sales_team.group_sale_manager,1,1,1,1 +access_mail_activity_type_sale_manager,mail.activity.type.sale.manager,mail.model_mail_activity_type,sales_team.group_sale_manager,1,1,1,1 \ No newline at end of file diff --git a/addons/sale/views/mail_activity_views.xml b/addons/sale/views/mail_activity_views.xml new file mode 100644 index 00000000000..6c0eede2515 --- /dev/null +++ b/addons/sale/views/mail_activity_views.xml @@ -0,0 +1,16 @@ + + + + + Activity Types + mail.activity.type + form + tree,form + ['|', ('res_model_id', '=', False), ('res_model_id.model', '=', 'sale.order')] + {'default_res_model': 'sale.order'} + + + \ No newline at end of file